C# 这段代码在c中的等价物是什么# List constants=new ArrayList(){{ 增加(1.4); 增加(0.4); 增加(1.2); 增加(2.4); 增加(4.2); 增加(5); 增加(6.0); 增加(7.0); }};
在C#3.0或更高版本中C# 这段代码在c中的等价物是什么# List constants=new ArrayList(){{ 增加(1.4); 增加(0.4); 增加(1.2); 增加(2.4); 增加(4.2); 增加(5); 增加(6.0); 增加(7.0); }};,c#,java,C#,Java,在C#3.0或更高版本中 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);
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);
}};
您可以省去D
s,但我更喜欢用数字文本来表示
另一方面,如果这真的代表了一个未命名常量的列表,那么最好使用一个不可变的集合,例如。例如:
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);
var常量=新列表{1.4,0.4,1.2,2.4,4.2,5,6,7}.AsReadOnly();
List constants=new List(){1.4,0.4,1.2,2.4,4.2,5,6,7};
像这样:
List<double> constants = new List<double>() { 1.4, 0.4, 1.2, 2.4, 4.2, 5, 6, 7 };
List常量=newlist(){1.4,0.4,…};
这使用了C#3.0中的一个新特性
如果仍在使用VS2005,则可以编写
List<Double> constants = new List<Double>() { 1.4, 0.4, ... };
List常量=新列表(新的双[]{1.4,0.4,…});
这是不完全一样的
编译器将第一行转换为列表上的一系列Add
调用
第二行创建一个
double[]
数组,并将其传递给List
构造函数,后者将其复制到列表中。以上只是一个静态列表初始化,因此C中的等价物是:
List<Double> constants = new List<Double>(new double[] { 1.4, 0.4, ... });
newlist(){1.4,0.4}
请注意,上面的Java代码实际上创建了一个新的内部类,它是ArrayList的子类,然后对其进行初始化。您通常不必担心这一点,但值得知道(它将有一个隐式
this
指针,并且在序列化时会引起麻烦)在Java中使用内部类可能不是最好的方法。你可能会想做类似的事情
List constants=Arrays.asList(新的Double[]{1.4,0.4,1.2,2.4,4.2,5.0,6.0,7.0})代码>你不需要做5D,它是推断出来的。@Yuriy:不,它不是推断出来的。它是隐式转换的。
List<Double> constants = new List<Double>() { 1.4, 0.4, ... };
List<Double> constants = new List<Double>(new double[] { 1.4, 0.4, ... });
new List<Double>(){ 1.4, 0.4 }