gpt4 book ai didi

现有集合的 C# Collection Initializer 语法

转载 作者:行者123 更新时间:2023-11-30 15:52:27 27 4
gpt4 key购买 nike

我最近在 C# 中发现了一种语法,它使您能够在初始化期间初始化只读集合:

class Foo
{
public List<Bar> Bars { get; } = new List<Bar>();
}

var foo = new Foo
{
Bars =
{
new Bar()
}
}

这很棒,因为它会产生非常有表现力的代码。但是我有一种情况,我已经有了 Bar 的集合,并且我想使用这种语法对其进行初始化(即使 Bars 是 readonly)。 有办法做到这一点吗?

var bar = new List<Bar>();
var foo = new Foo
{
Bars = bar // error: Property or indexer Foo.Bar cannot be assigned to -- it is read only
}

最佳答案

I want to initialize it using this syntax (even though Bars is readonly)

你根本做不到。

因为我们正在使用初始化语法,它实际上调用了 setter 方法又名 set的属性,并且您有一个只能由类本身设置的 readonly 属性,为了在类外部设置它,我们需要通过 Foo 的构造函数传递它。在创建它的实例时。

更新:

第一个示例代码实际上以调用 Add 结束。 List<T> 的方法.它将编译为以下代码:

 Foo foo = new Foo();
foo.Bars.Add(new Bar());

虽然您可以将新项目添加到 Bars但是由于只读属性,您不能直接使用初始化程序将其引用更改为指向不同的对象,而调用 List<Bar> 的成员方法是完全合法的。在类似 Remove 的实例上, Find

关于现有集合的 C# Collection Initializer 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441143/

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