c# - 集合初始化

标签 c# .net

你可以像这样初始化一个数组:

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。赋值运算符不支持这一点,因为它们是不同的类型。 List 不是 int 类型的数组。不过,正如您所说,List 有一个构造函数,它确实将 int[] 作为参数,并且 C# 3.0 中添加的新语法糖允许您方便地使用 { } 将成员添加到由定义的集合中默认构造函数。

正如@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/

相关文章:

c# - 正在构建的项目 "MSIL"的处理器架构与引用“AMD64”的处理器架构不匹配

c# - [DataContract] 的 JSON 示例

c# - 从 asp.net mvc 4 razor 中的自定义 Html Helpers 访问属性

c# - ServiceStack 中是否有任何等效于 ValidateAntiForgeryToken 的东西?

.net - 尝试将 powershell 模块发布到本地存储库时出现“Dotnet 打包失败”错误

.net - SQLite 在使用密码在 Linux 上运行时抛出 "EntryPointNotFoundException: sqlite3_key"异常

.net - .NET/MONO 交叉编译的最佳实践

javascript - 将C#加密机制代码转换为javascript

c# - 使用NEST进行 Elasticsearch -调试和浏览器模式下的结果不同

C# - Entity Framework - 了解一些基础知识