为什么这段代码很好:
var rowsfilterdbyvaluemembercolumn =
this.PrimaryDataSource.AsEnumerable().Where(r => r.Field<object>(this.ValueMemberColumn) == value);
这段代码不好:
var rowsfilterdbyvaluemembercolumn =
this.PrimaryDataSource.AsEnumerable().Where(r => r.Field<int>(this.ValueMemberColumn) == Convert.ToInt32(value));
任何人都能解释一下吗?
答案 0 :(得分:3)
因为第一个,r.Field<object>
将值视为对象,因此在value
上进行参考比较。因为这两个不是同一个对象,所以它们比较为不相等。
第二个将this.ValueMemberColumn
转换为整数,并对您通过调用ToInt32
创建的整数进行值比较。
有关详细信息,请参阅C#编程指南中的Equality Comparisons。
答案 1 :(得分:0)
当您将两个整数作为对象进行比较时,会发生以下情况:编译器生成代码以将两个整数打包,以便它们现在是引用类型。所以它们现在被视为对象,编译器正在寻找这种类型的==运算符重载。对象类型没有,因此它回退到引用比较(它不会调用Equals)。即使总数相等,它们也总是被列为两个实例。所以他们现在不是平等的参考,他们不被视为平等。