你可以像这样初始化一个数组:
int [ ] arr = { 1, 2, 3, 4, 5 };
但是List<T>
不允许这样做:
List<int> list = { 1, 2, 3, 4, 5 };
这背后的原因是什么?
毕竟两者都允许这样做:
int [ ] arr = new int [ ] { 1, 2, 3, 4, 5 };
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
还有为什么不能用 LinkedList<T>
做到这一点?:
LinkedList<int> ll = new LinkedList<int>() { 1, 2, 3 };
更新
谢谢大家。刚看到回复。我想选择几个答案,但它不允许我这样做。
为什么 LinkedList 有一个 Add 方法,虽然是显式实现的?这可能会被修复吗?因为像这样的问题在被忽视时只会像滚雪球一样变成更大的问题,对吗?
最佳答案
您的第一个示例是用于初始化整数数组的标准语言语法。左边的值计算为 int[]。在第二个示例中,您试图将 int[] 分配给 List
正如@Patrik 所说,这对 LinkedList 不起作用,因为它没有将 Add() 方法定义为其接口(interface)的一部分(有 ICollection.Add 的显式实现),因此语法糖不起作用.
但是,LinkedList 有一个简单的解决方法。
public class LinkedListWithInit<T> : LinkedList<T>
{
public void Add( T item )
{
((ICollection<T>)this).Add(item);
}
}
LinkedList<int> list = new LinkedListWithInit<int> { 1, 2, 3, 4, 5 };
关于c# - 集合初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414616/