我有一个Item类,它有一个不包含setter的可公开访问的成员NoSetter.该对象显式声明了一个get,它检索一个私有的只读List对象.
class Item
{
private readonly List<string> emptyString;
public Item()
{
this.emptyString = new List<string>();
}
public List<string> NoSetter
{
get { return this.emptyString; }
}
}
Run Code Online (Sandbox Code Playgroud)
创建此对象时,无法将NoSetter设置为列表,编译器会在您尝试时失败.
List<string> goldenString = new List<string>();
goldenString.Add("Nope");
Item item = new Item()
{
NoSetter = goldenString
// or NoSetter = new List<string>();
};
Run Code Online (Sandbox Code Playgroud)
但是,如果您内联创建列表,则可以设置NoSetter.
Item item = new Item()
{
NoSetter = { "But this still works" }
};
// Outputs: "But this still works"
Console.WriteLine(item.NoSetter.First<string>());
Run Code Online (Sandbox Code Playgroud)
我希望NoSetter.Get方法应该返回readonly列表emptyString,而是返回内联的NoSetter对象.是什么导致.net?这是预期的吗?
Cha*_*ger 11
你的第二段代码没有设置新的List<string>,它只是添加了它的值.
Item item = new Item()
{
NoSetter = { "But this still works" }
};
Run Code Online (Sandbox Code Playgroud)
相当于:
Item item = new Item();
item.NoSetter.Add("But this still works");
Run Code Online (Sandbox Code Playgroud)
{...}应用于集合时的语法称为集合初始值设定项.引用文档(强调我的):
使用集合初始值设定项可以在初始化实现IEnumerable的集合类时指定一个或多个元素初始值设定项.元素初始值设定项可以是简单值,表达式或对象初始值设定项.通过使用集合初始值设定项,您不必在源代码中指定对类的Add方法的多个调用; 编译器添加调用.
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |