我喜欢C#3 initializer syntax并经常使用它,但是今天在Reflector中,出现了以下内容:

var binding = new WSHttpBinding
{
  ReaderQuotas = { MaxArrayLength = 100000 },
  MaxReceivedMessageSize = 10485760
};

起初,我认为这是一个错误,但确实可以编译!猜猜我一直在学习新知识。 :)

据我所知,它设置了MaxArrayLengthReaderQuotas属性的WSHttpBinding属性。

此语法是创建一个新的ReaderQuotas对象然后设置属性,还是假定该属性已被初始化?这是初始化“子”属性的通用方法吗?

我确实发现语法有点困惑...

最佳答案

不,除非您使用= new SomeType {...},否则不会创建新对象:

var binding = new WSHttpBinding
{
    ReaderQuotas = new XmlDictionaryReaderQuotas { MaxArrayLength = 100000 },
    MaxReceivedMessageSize = 10485760
};

您的示例显示了用于设置现有子对象的属性的初始化程序语法。在集合上调用“添加”方法也有类似的语法。

您的代码大致可与以下代码进行比较:
var binding = new WSHttpBinding();
binding.ReaderQuotas.MaxArrayLength = 100000;
binding.MaxReceivedMessageSize = 10485760;

08-08 09:31