【问题标题】:C# Syntax explanationC#语法解释
【发布时间】:2011-02-18 12:37:41
【问题描述】:

几天前我看到了这个语法,想知道是否有人可以告诉我它是如何调用的,它是如何工作的以及它在哪里有用。

当我问它如何工作时,我的意思是 Setters 属性是只读的(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

【问题讨论】:

  • 我个人对新 Setter 周围的打开和关闭刹车感到困惑。这个:Setters = **{** new Sett...

标签: c# .net syntax


【解决方案1】:

它是调用object initializercollection initializer,它允许你在调用构造函数时在{ .. }块中设置属性。在块内,您使用 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,它解释了集合初始化器的一些棘手方面(以您使用它们的样式)。

【讨论】:

  • 我添加了一些细节——注意Setters = { .. }不需要修改Setters。它只是调用Add 方法。
【解决方案2】:

实例化了新对象Style,然后设置它的属性Setters 这是一个c# 3.0 特性。

【讨论】:

    【解决方案3】:

    创建对象时似乎正在设置默认值。这有点像将值传递给构造函数,但您不仅限于构造函数为您提供的选项。

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 1970-01-01
      • 2011-04-10
      • 2013-03-19
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多