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

时间:2010-10-19 17:19:17

标签: 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);           
          }};

5 个答案:

答案 0 :(得分:17)

在C#3.0或更高版本中,

var constants = new List<double> { 1.4, 0.4, 1.2, 2.4, 4.2, 5D, 6D, 7D };
使用constants关键字

List<double>implicitly typedvar。使用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);

你可以省略D,但我更倾向于使用数字文字。

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

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

答案 1 :(得分:7)

像这样:

List<Double> constants = new List<Double>() { 1.4, 0.4, ... };

这使用了C#3.0中的新功能。

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

List<Double> constants = new List<Double>(new double[] { 1.4, 0.4, ... });

这不完全相同。

编译器将第一行转换为列表中的一系列Add调用。

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

答案 2 :(得分:4)

以上只是静态列表初始化,因此C#中的等价物将是:

new List<Double>(){ 1.4, 0.4 } 

请注意,上面的Java代码实际上创建了一个新的内部类,它是ArrayList 的子类,然后将其初始化。你通常不必担心这一点,但值得知道(它会有一个隐含的this指针,并在序列化时引起麻烦)

答案 3 :(得分:2)

List<double> constants = new List<double>() { 1.4, 0.4, 1.2, 2.4, 4.2, 5, 6, 7 };

答案 4 :(得分:1)

使用内部类可能不是在Java中执行此操作的最佳方法。您可能想要做类似

的事情

List<Double> constants = Arrays.asList(new Double[]{1.4,0.4,1.2,2.4,4.2,5.0,6.0,7.0});