【发布时间】:2011-01-23 12:52:04
【问题描述】:
假设我有一个类,它的属性是字典
new MyClass()
{
Table = { {"test",true},{"test",false} }
}
但是,在初始化程序之外我不能这样做:
this.Table = { {"test",true},{"test",false} };
为什么初始化器是一个特例?我冒昧地猜测它与 LINQ 要求、协方差或诸如此类的东西有关,但感觉有点不一致,不能在任何地方使用那种初始化程序......
【问题讨论】:
-
我认为编译器错误是“预期表达式”这一事实是一个很大的线索。在第二个示例中,语法并不像您通常期望的那样指示表达式,即没有
new运算符。我怀疑第一个示例可以正常工作,因为它是一种特殊情况,并且编译器在语法上对表达式的构成更加放松。宽松规则的好处是更简洁的语法,这对于对象初始化器语法的上下文来说是非常可取的,否则它看起来会很丑。
标签: c# .net object-initializers