是否可以在C#中使用{a,b,c}实例化队列?

xeo*_*hin 5 c# arrays queue icollection

是否有可能在C#中做到这一点?

Queue<string> helperStrings = {"right", "left", "up", "down"};
Run Code Online (Sandbox Code Playgroud)

或者我必须首先制作阵列?

dig*_*All 16

不,你不能以这种方式初始化队列.

无论如何,你可以这样做:

var q = new Queue<string>( new[]{ "A", "B", "C" });
Run Code Online (Sandbox Code Playgroud)

显然,这意味着要通过一个数组.

  • @Robert Harvey:首先,字符串是引用类型.只有值类型被装箱.其次,即使数组是值类型,隐式类型数组创建运算符也会推断出类型.new [] {1,2,3}是一个未装箱的整数数组,而不是一个盒装整数数组! (5认同)

Eri*_*ert 12

是否有可能在C#中做到这一点?

很不幸的是,不行.

C#中的集合初始值设定规则是该对象必须(1)实现IEnumerable,(2)具有Add方法.集合初始化器

new C(q) { r, s, t }
Run Code Online (Sandbox Code Playgroud)

被重写为

temp = new C(q);
temp.Add(r);
temp.Add(s);
temp.Add(t);
Run Code Online (Sandbox Code Playgroud)

然后导致任何温度.

Queue<T>实现IEnumerable但它没有Add方法; 它有一个Enqueue方法.

  • @digEmAll:这是正确的.这里的糖的甜度是双重的.首先,它们非常紧凑.其次,他们将之前的一堆陈述变成了一个表达; 这意味着您可以在只有表达式有效的上下文中使用它们,例如字段初始值设定项或LINQ查询. (2认同)