我前几天看到这种语法,并想知道是否有人可以告诉我它是如何调用的,它是如何工作的以及它在哪里有用。
当我问它是如何工作的时候我的意思是Setters属性是readonly(get), 第二个是这个括号的意思:“Setters = {”。
http://msdn.microsoft.com/en-us/library/ms601374.aspx
由于
datagrid.CellStyle = new Style(typeof(DataGridCell))
{
// Cancel the black border which appears when the user presses on a cell
Setters = { new Setter(Control.BorderThicknessProperty, new Thickness(0)) } // End of Setters
} // End of Style
答案 0 :(得分:9)
调用对象初始值设定项和集合初始化程序,它允许您在调用构造函数时在{ .. }
块中设置属性。在块中,您使用的是Setters = { ... }
集合初始化程序 - 它允许您指定集合的元素(这里,您不必创建集合的新实例 - 它只是添加了元素大括号)。有关详细信息see this MSDN page。
通常,对象初始值设定项的语法有几个选项:
// Without explicitly mentioning parameter-less constructor:
new A { Prop1 = ..., Prop2 = ... }
// Specifying constructor arguments:
new A(...) { Prop1 = ..., Prop2 = ... }
集合初始值设定项的语法如下所示:
// Creating new instance
new List<int> { 1, 2, 3 }
// Adding to existing instance inside object initializer:
SomeList = { 1, 2, 3 }
值得一提的是,这与匿名类型密切相关(您没有提供类型名称 - 编译器会生成一些隐藏类型,您可以使用var
来处理它):
// Create anonymous type with some properties
new { Prop1 = ..., Prop2 = ... }
所有这些功能都是C#3.0中的新功能。另请参阅此SO post,它解释了集合初始值设定项的一些棘手问题(以您使用它们的样式)。
答案 1 :(得分:0)
实例化新对象Style
,然后设置其属性Setters
这是一个c#3.0功能。
答案 2 :(得分:0)
似乎是在制作对象时设置默认值。这有点像将值传递给构造函数,但您不仅限于构造函数为您提供的选项。