0

我需要知道如何解释以下内容,

var diff = orignalConfigFile.Where<KeyValuePair<string, List<ConfigurationValue>>>(x => !newConfig.Contains(x) || !x);

这里orignalConfigFilenewConfig是一本字典。ConfigurationValue是一个类。

令我困惑的是语句(x => !newConfig.Contains(x) || !x) x something 不包含 x for newConfig 和 x 本身。

4

5 回答 5

5

我假设该类可以隐式转换为bool这就是编译的原因:|| !x.

public static implicit operator bool(ConfigurationValue me)
{
   return me.BoolProperty;
}

一般来说,这不是最佳做法。您应该很少使用隐式转换,因为它难以理解并且容易出错。

关于转换运算符的 MSDN 指南

  • 如果最终用户没有明确期望此类转换,请勿提供转换运算符
  • 如果转换可能有损,请勿提供隐式转换运算符。例如,不应该有从 Double 到 Int32 的隐式转换,因为 Double 的范围比 Int32 更宽。即使转换可能有损,也可以提供显式转换运算符.....
于 2013-08-23T09:02:26.880 回答
1

x => !newConfig.Contains(x) || !x方法:

originalConfigFile 中当前选中的项目是 x。那个特定的 x 不在 newConfig 集合中,或者它是假的,或者 x 重载了 ! 运算符,它返回 false。

于 2013-08-23T09:01:03.533 回答
1

x => !newConfig.Contains(x) || !x是一个lambda 表达式,它是一种表示委托的语法。在这种情况下,委托是一个将评估为布尔值的函数,如果 newConfig 不包含 x 或 x 为 false,则为 true,其中 x 是 orignalConfigFile 枚举返回的每个对象。

于 2013-08-23T09:02:48.577 回答
0

这里

X=> stands for Anonymous Method Which is used to Iterate the Result instead using foreach loop..
于 2013-08-23T09:00:42.263 回答
0

我认为newConfig是一个List<ConfigurationValue>并且!newConfig.Contains手段x不在newConfig list

于 2013-08-23T09:03:48.040 回答