Tag: 对象初始化器

如果初始化程序抛出,是否构造了一个对象?

我在Jag Reeghal的博客上阅读了这篇文章 。在我看来,他所建议的内容实际上与使用对象初始化器不同。 然后我意识到我确实不知道。 构造一个对象时,使用对象初始化器,并且其中一个初始化器抛出(可能是Null Referenceexception)……实际构造的对象是什么? 这基本上就像是在构造函数中抛出的exception吗? 或者是完全构造的对象,然后初始化?

协变对象初始化器?

假设我有一个具有字典的属性的类,使用对象初始化器我可以使用这种语法(我觉得看起来很干净): new MyClass() { Table = { {“test”,true},{“test”,false} } } 但是,在初始化程序之外我不能这样做: this.Table = { {“test”,true},{“test”,false} }; 为什么初始化器是特例? 我猜测它与LINQ要求,协方差或诸如此类的东西有关,但感觉有点不一致,无法在任何地方使用这种初始化器……

CodeDom和集合初始值设定项

有没有办法使用C#CodeDom生成字典初始化程序? 那些支持吗? 我想拥有: private IDictionary map = new Dictionary { { “Name”, “Value” }, … };

对象初始值设定项内的属性可以互相引用吗?

在动态对象创建匿名类型对象(即在对象初始化程序内)期间,属性是否可能以某种方式相互引用? 下面的简化示例需要重用Age属性,而不需要对GetAgeFromSomewhere()进行第二次大量调用。 当然它不起作用。 有关如何实现这一目标的任何建议? var profile = new { Age = GetAgeFromSomewhere(id), IsLegal = (Age>18) }; 对于动态对象匿名类型的对象初始化器,这样的事情是可能的还是不可能的 ?

C#Object Initialiser – 对新实例的引用

我可以以某种方式获得对使用对象初始化器创建的实例的引用 var x = new TestClass { Id = 1, SomeProperty = SomeMethod(this) } “this”应该指向我正在创建的新TestClass实例。 但它显然是指代码所在的类的实例。 我不是在问这是否是一个很好的方法。 我知道我可以这样做: var x = new TestClass {Id= x}; x.SomeProperty = SomeMethod(this); 我有一个复杂的场景,在对象初始化器中引用新实例会使生活更轻松。 这有可能吗?

从对象初始化程序访问属性

我有以下Person类 class Person { public string FirstName { get; set; } public string LastName { get; set; } public string FullName { get { return FirstName + ” ” + LastName; } } public IEnumerable Children { get; set; } } 我可以像这样初始化它: Person p = new Person() { FirstName = “John”, LastName = “Doe” }; […]

在对象初始值设定项中分配事件

为什么不能在C#中的对象初始值设定项中分配事件和属性? 这样做似乎很自然。 var myObject = new MyClass() { Property = value, Event1 = actor, // or Event2 += actor }; 还是有一些我不知道的技巧?

嵌套对象初始化器语法

Resharper刚给我建议了以下重构: // Constructor initializes InitializedProperty but // the UninitializedSubproperty is uninitialized. var myInstance = new MyClass(); myInstance.InitializedProperty.UninitializedSubproperty = new MyOtherClass(); // becomes var myInstance = new MyClass { InitializedProperty = { UninitializedSubproperty = new MyOtherClass() } }; 我以前从未见过这种对象初始化。 特别是我看不出来 InitializedProperty = { UninitializedSubproperty = new MyOtherClass() } 没有任何意义 – 它没有为InitializedProperty 分配任何东西。 是否在任何地方指定了此行