c#中此代码的等价物是什么

Sri*_*ddi 4 c# java

List<Double> constants = new ArrayList<Double>() {{
            add(1.4);
            add(0.4);
            add(1.2);
            add(2.4);
            add(4.2);
            add(5);
            add(6.0);
            add(7.0);           
          }};
Run Code Online (Sandbox Code Playgroud)

Ani*_*Ani 17

在C#3.0或更高版本中,

var constants = new List<double> { 1.4, 0.4, 1.2, 2.4, 4.2, 5D, 6D, 7D };
Run Code Online (Sandbox Code Playgroud)

constants隐式类型,以List<double>var关键字.使用collection-initializer语法初始化列表(通过将数字放在大括号中).

这相当于(C#2.0或更高版本):

List<double> constants = new List<double>();
constants.Add(1.4);
constants.Add(0.4);
constants.Add(1.2);
constants.Add(2.4);
constants.Add(4.2);
constants.Add(5D);
constants.Add(6D);
constants.Add(7D);
Run Code Online (Sandbox Code Playgroud)

你可以省略Ds,但我更喜欢明确的数字文字.

另一方面,如果这真的代表了一个未命名的常量列表,那么最好使用一个不可变的集合,比如ReadOnlyCollection<T>.例如:

var constants = new List<double>{1.4, 0.4, 1.2, 2.4, 4.2, 5, 6, 7}.AsReadOnly();
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 7

像这样:

List<Double> constants = new List<Double>() { 1.4, 0.4, ... };
Run Code Online (Sandbox Code Playgroud)

这使用C#3.0中的新功能.

如果你还在使用VS2005,你可以写

List<Double> constants = new List<Double>(new double[] { 1.4, 0.4, ... });
Run Code Online (Sandbox Code Playgroud)

这不完全一样.

第一行由编译器转换为Add列表上的一系列调用.

第二行创建一个double[]数组并将其传递给List<T>构造函数,然后将其复制到列表中.