gpt4 book ai didi

c# - 集合初始值设定项的奇怪语法

转载 作者:太空狗 更新时间:2023-10-29 23:13:34 28 4
gpt4 key购买 nike

假设,我们有一个非常简单的类:

class ObjectList {
public List<string> List1 { get; } = new List<string>();
public List<string> List2 { get; set; }
}

我们想创建这个类的一个实例:

ObjectList objectList = new ObjectList {
List1 = { "asdf", "qwer" },
List2 = new List<string> { "zxcv", "1234" }
};

因此,对于 List2 来说没问题,使用“=”我们设置属性。但在 List1 的情况下,看起来我们设置了属性,但实际上,我们假设在之前的某个地方设置它,而这里我们只设置值。它与数组初始化非常相似:

string[] arr = { "val1", "val2" }

为什么 C# 在这里使用这种令人困惑的语法?

编辑:我想我让许多观众对 C# 6.0 语法感到困惑,但这不是重点。让我们使用旧的 C# 3.0 和 .net 2.0。让我们也添加更多乐趣,并从一开始就向列表添加一些值(“1”和“2”),正如 Jeff Mercado 所建议的:

class Program {
static void Main(string[] args) {
ObjectList objectList = new ObjectList {
List1 = { "asdf", "qwer" },
};
}
}
class ObjectList {
List<string> _List1 = new List<string>() { "1", "2" };
public List<string> List1 {
get {
return _List1;
}
}
}

它显示了同样奇怪的语法。最后我有列表{“1”,“2”,“asdf”,“qwer”},这更加令人困惑。我可以期待更少。

最佳答案

Why C# uses this confusing syntax here?

你是对的,它有点奇怪,但那是因为你混合了 2 个原则。正如一些评论已经指出的那样,{ item1, items2 }语法转换为 .Add(itemN)= 左侧的项目时调用 是一个集合

所以奇怪的是

List<SomeClass> list = new List<SomeClass> { item1, item2 };
SomeClass[] array = { item1, item2 };

区别对待。

另一部分是您的示例移动了 new List<SomeClass>周围,​​但在这两种情况下都存在。

关于c# - 集合初始值设定项的奇怪语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405602/

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