我有一个具有仅获取集合属性的类。我想使用现有集合中的值来初始化集合。
我知道可以初始化集合使用集合初始值设定项。我还可以创建该对象然后使用AddRange
在集合上添加现有集合的项目。然而,这将创建具有空列表的对象,然后添加现有项目。
有没有办法创建对象并首先正确初始化 List (当然不添加构造函数)?
using System.Collections.Generic;
namespace EmptyConsoleApp
{
internal class Program
{
public static void Main(string[] args)
{
// Compiles, but is not what I need
var firstHolder = new Holder()
{
TheList = {"A", "B"}
};
// Compiles, but initializes the list after object creation
var existingList = new List<string>() {"Foo", "Bar"};
var secondHolder = new Holder();
secondHolder.TheList.AddRange(existingList);
// Does not compile
var thirdHolder = new Holder()
{
TheList = {existingList}
};
}
}
internal class Holder
{
public Holder()
{
TheList = new List<string>();
}
public List<string> TheList { get; }
}
}
不可以。您不能从集合初始值设定项分配此只读属性。毕竟它是只读的。
TheList = { "A", "B" }
自从它调用以来就有效Add
on TheList
(对于添加的每个项目一次),它不会创建和分配新实例,这是不允许的。
TheList = { existingList }
不起作用,因为存在打字问题(TheList = { existingList[0] }
确实有效)。
最好的选择是创建一个构造函数参数,并放弃使用集合初始值设定项来处理不适合的内容的想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)