gpt4 book ai didi

c# - 组合列表初始化器和对象初始化器

转载 作者:可可西里 更新时间:2023-11-01 03:06:04 26 4
gpt4 key购买 nike

是否可以同时组合列表初始化器和对象初始化器?给定以下类定义:

class MyList : List<int>
{
public string Text { get; set; }
}

// we can do this
var obj1 = new MyList() { Text="Hello" };

// we can also do that
var obj2 = new MyList() { 1, 2, 3 };

// but this one doesn't compile
//var obj3 = new MyList() { Text="Hello", 1, 2, 3 };

这是设计使然,还是只是 C# 编译器的错误或缺失的功能?

最佳答案

不,查看 C# 规范第 7.6.10 节中的定义,object-or-collection-initializer表达式是或者 object-initializer 一个collection-initializer .

object-initializer由多个member-initializer组成s,每一个的形式都是initializer = initializer-valuecollection-initializer由多个element-initializer组成s,每一个都是一个non-assigment-expression .

所以它看起来像是设计使然 - 可能是为了简单起见。老实说,我不能说我曾经想要这样做。 (我通常不会从 List<int> 开始 - 我会编写它。)我真的不想看到:

var obj3 = new MyList { 1, 2, Text = "Hello", 3, 4 };

编辑:如果你真的,真的想要启用它,你可以把它放在类中:

class MyList : List<int>
{
public string Text { get; set; }
public MyList Values { get { return this; } }
}

此时你可以写:

var obj3 = new MyList { Text = "Hello", Values = { 1, 2, 3, 4 } };

关于c# - 组合列表初始化器和对象初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6254183/

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