gpt4 book ai didi

c# - 从现有集合中初始化对象初始化程序中的只读集合

转载 作者:行者123 更新时间:2023-12-05 05:16:50 25 4
gpt4 key购买 nike

我有一个类具有只获取集合属性。我想用现有集合中的值初始化集合。

我知道可以初始化集合 using a collection initializer .我还可以创建对象,然后在集合上使用 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"} 有效,因为它在 TheList 上调用 Add (每添加一个项目一次),它不会创建和分配新实例,这是不允许的。

TheList = { existingList } 不工作,因为存在打字问题(TheList = { existingList[0] } 工作)。

最好的选择是创建一个构造函数参数,并放弃使用集合初始化器来处理它不适合的东西的想法。

关于c# - 从现有集合中初始化对象初始化程序中的只读集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50017130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com