Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 集合初始化语法,用于什么?_C#_Language Agnostic_Programming Languages_Language Features_Language Design - Fatal编程技术网

C# 集合初始化语法,用于什么?

C# 集合初始化语法,用于什么?,c#,language-agnostic,programming-languages,language-features,language-design,C#,Language Agnostic,Programming Languages,Language Features,Language Design,我们可以像这样使用函数 public static List<T> New<T>(params T[] items) { return new List<T>(items); } 公共静态列表新建(参数T[]项){ 返回新列表(项目); } 更重要的是它更好 var list = new List<int> {1,2,3}; var list = List.New(1,2,3); var list=新列表{1,2,3}; var li

我们可以像这样使用函数

public static List<T> New<T>(params T[] items) {
    return new List<T>(items);
}
公共静态列表新建(参数T[]项){
返回新列表(项目);
}
更重要的是它更好

var list = new List<int> {1,2,3};
var list = List.New(1,2,3);
var list=新列表{1,2,3};
var list=list.New(1,2,3);
那么,当我们真的需要使用它的时候

字典

public static Dictionary<T, K> New<T, K>(T key, K value) {
    return new Dictionary<T,K>().FAdd(key, value);
}

var dict = new Dictionary<int, string>(){
 {1, "a"},
 {2, "b"}
};

var dict = Dict.New(1,"a").FAdd(2, "b");
公共静态字典新建(T键,K值){
返回新字典().FAdd(键,值);
}
var dict=新字典(){
{1,“a”},
{2,“b”}
};
var dict=dict.New(1,“a”).FAdd(2,“b”);
为什么更好,类型推断

var x = new Dictionary<string, List<int>>(){
   {"a", new List<int>{1}},
   {"b", new List<int>{2}},
}

var x = Dict.New("a", List.New(1)).FAdd("b", List.New(2));
var x=newdictionary(){
{“a”,新列表{1},
{“b”,新名单{2},
}
var x=Dict.New(“a”,List.New(1)).FAdd(“b”,List.New(2));

这需要在您的类型中添加新函数。集合初始值设定项不需要任何外部代码即可工作-您可以将它们用于任何兼容的集合类型,并且由编译器自动处理

此外,使用语言功能而不是滚动自己的方法将使代码对其他开发人员更加明显。由于您使用的是标准语言功能,因此意图变得显而易见。使用扩展方法可以很容易地掩盖您的意图

那么,当我们真的需要使用它的时候


你永远不需要使用它。与所有语言功能一样,它也是一种工具,作为开发人员,您可以选择使用或忽略它。

这需要在您的类型中添加一个新函数。集合初始值设定项不需要任何外部代码即可工作-您可以将它们用于任何兼容的集合类型,并且由编译器自动处理

此外,使用语言功能而不是滚动自己的方法将使代码对其他开发人员更加明显。由于您使用的是标准语言功能,因此意图变得显而易见。使用扩展方法可以很容易地掩盖您的意图

那么,当我们真的需要使用它的时候


你永远不需要使用它。与所有语言功能一样,它也是一种工具—作为开发人员,您可以选择使用或忽略它。

您的示例的一个问题是,它的效率远远低于集合初始值设定项语句。使用
params
强制创建两次集合

  • 一次,为值创建.Net数组
  • 创建实际集合
  • 另一方面,集合初始值设定项只创建第二个集合

    总体而言,尽管集合初始值设定项的主要原因之一是不必编写此API。框架中有各种各样的集合,其中有各种各样的创建模式。许多函数没有构造函数执行
    IEnumerable
    ,而是强制执行一组单独的Add调用。你最终会一遍又一遍地写这个方法


    集合初始值设定项允许您避免完全写入集合,而只使用开箱即用的集合

    您的示例的一个问题是,它的效率远远低于集合初始值设定项声明。使用
    params
    强制创建两次集合

  • 一次,为值创建.Net数组
  • 创建实际集合
  • 另一方面,集合初始值设定项只创建第二个集合

    总体而言,尽管集合初始值设定项的主要原因之一是不必编写此API。框架中有各种各样的集合,其中有各种各样的创建模式。许多函数没有构造函数执行
    IEnumerable
    ,而是强制执行一组单独的Add调用。你最终会一遍又一遍地写这个方法


    集合初始值设定项允许您避免完全写入集合,而只使用开箱即用的集合

    不,不是更好。集合初始化语法支持任何类:1)具有
    Add
    方法2)实现
    IEnumerable
    。因此,它适用于每个集合,即使是
    字典
    ,而不仅仅是
    列表
    。另外,您的方法需要创建数组,虽然开销很小,但过多。初始化没有它。

    不,它不是更好。集合初始化语法支持任何类:1)具有
    Add
    方法2)实现
    IEnumerable
    。因此,它适用于每个集合,即使是
    字典
    ,而不仅仅是
    列表
    。另外,您的方法需要创建数组,虽然开销很小,但过多。初始化没有它。

    但是。。。过早优化是万恶之源@有目的的过早去优化是所有愚蠢行为的根源。如果你使用标准功能,你会自动继承对这些功能所做的任何改进或优化。这是避免为任何软件问题重新发明轮子的一个很好的理由,除非你有一个相当令人信服的理由。但是。。。过早优化是万恶之源@有目的的过早去优化是所有愚蠢行为的根源。如果你使用标准功能,你会自动继承对这些功能所做的任何改进或优化。这是避免为任何软件问题重新发明轮子的一个很好的理由,除非你有一个相当令人信服的理由。我相信惯用代码和质量之间有很强的相关性。我相信惯用代码和质量之间有很强的相关性。我想99%的时间我们都在使用用户列表和字典。我不认为它是大刻度盘,因为它对其他集合有一些语法。@Dotnetter但为什么呢?这里给出了通用语法,适用于任何当前和未来的collections.dotneter,类型推断到目前为止被高估了,在列表实现的情况下,您将一无所获。看看你的例子,我也看不到类型推断的真正好处。@Dotnetter: