Tob*_*oby 9 c# object-initializers
我正在为对象使用对象初始st值设定项:
public class Container
{
public Container () { ContainedItem = new Item; }
public Item ContainedItem { get; set; }
}
public class Item
{
public string Value { get; set; }
}
var MyContainer = new Container()
{
// I want to populate the the property Value of the property Item
// with the second line rather than the first
ContainedItem = new Item() { Value = FooString }, // This works
ContainedItem.Value = FooString // This assigns to the same member but does not work
};
Run Code Online (Sandbox Code Playgroud)
第二个初始化程序行给出错误:
当前上下文中不存在名称"ContainedItem".
初始化程序成员声明符无效.
并建议ContainedItem在本地范围内声明某处.
现在作为第一行工作,可以看出它ContainedItem实际上是一个有效的属性,Container并且MyContainer.ContainedItem绝对不是null ...那么为什么以下行无法识别呢?
您可以按原样为“子属性”分配值,只是不使用该语法。这是一个完整的示例:
using System;
public class Container
{
public Item Item { get; set; } = new Item();
}
public class Item
{
public string Value { get; set; }
}
class Test
{
static void Main(string[] args)
{
var container = new Container
{
Item = { Value = "hello" }
};
}
}
Run Code Online (Sandbox Code Playgroud)
中的对象初始值设定项Main相当于:
var tmp = new Container();
tmp.Item.Value = "hello";
var container = tmp;
Run Code Online (Sandbox Code Playgroud)
请注意,这依赖于Container.Item返回一个有效的对象,而没有在对象初始值设定项中显式初始化该对象 - 在我的示例中就是这种情况,但情况并非总是如此。
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |