我喜欢C#3 initializer syntax并经常使用它,但是今天在Reflector中,出现了以下内容:
var binding = new WSHttpBinding
{
ReaderQuotas = { MaxArrayLength = 100000 },
MaxReceivedMessageSize = 10485760
};
起初,我认为这是一个错误,但确实可以编译!猜猜我一直在学习新知识。 :)
据我所知,它设置了
MaxArrayLength
的ReaderQuotas
属性的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;