有人能告诉我C#Code中使用的以下语句的含义吗?

时间:2013-08-23 08:55:34

标签: c#

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

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

此处orignalConfigFilenewConfig是字典。 ConfigurationValue是一个类。

令我困惑的是陈述(x => !newConfig.Contains(x) || !x) x对于newConfig和x本身不包含x的东西。

5 个答案:

答案 0 :(得分:5)

我认为该类implicitely可转换为bool,这就是编译的原因:|| !x

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

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

MSDN guidelines on Conversion Operators

  • 如果最终用户未明确预期此类转换,请勿提供转换运算符
  • 如果转换可能有损,请勿提供隐式转换运算符。 例如,不应该存在从Double到Int32的隐式转换,因为Double的范围比Int32宽。即使转换可能存在损失,也可以提供显式转换运算符.....

答案 1 :(得分:1)

x => !newConfig.Contains(x) || !x表示:

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这里

X=> stands for Anonymous Method Which is used to Iterate the Result instead using foreach loop..

答案 4 :(得分:0)

我认为newConfigList<ConfigurationValue>!newConfig.Contains表示x不在newConfig list