c# - 为什么 Linq 允许意外比较分配?
问题描述
与 C 和 C++ 不同,当您在 C# 中执行此操作时
bool b = true;
if(b = false) Console.WriteLine("Dont panic!");
编译器(正确地)抱怨Warning CS0665 Assignment in conditional expression is always constant; did you mean to use == instead of = ?
但是,如果我不小心在 Linq 语句中分配而不是比较,则没有任何警告并且编译器会编译:
var list = new List<bool>() { true, false, true };
var count = list.Count(b => b = false); //returns 0
Console.WriteLine(count);
反编译显示 Lambda 的样子:
internal bool <Main>b__0_0(bool b) => false;
使用对象时情况更糟:
var count = list.Count(s => s.SomeField = false); //returns 0
internal bool <Main>b__0_0(Program.Stuff s)
{
bool flag;
s.SomeField = flag = false;
return flag;
}
编译器是否有理由阻止这一点?
解决方案
推荐阅读
- java - 将 Int 值转换为文本字段
- python - python数据框中的融化/枢轴
- angular - 基于 geofireX 位置的内部连接集合
- c# - 不能两次射火球
- firebase - Flutter 聊天应用中的 NoSuchMethodError: 'dart.global.firebase.auth'
- javascript - 请求 IP 摄像机 Javascript
- haskell - 如何编写一个计算 x^16 的函数?
- wordpress - 在 Woocommerce 审查订单(结帐)和购物车总数(购物车)页面中为具有自定义数据的产品添加单独的购物车行
- java - 如果存在,如何从这个 java 问题中删除冗余?
- latex - 在 .bst 文件中添加 \url 链接到函数