默认初始化,创建一个结构体与类对象的数组
本文关键字:结构体 对象 数组 一个 初始化 创建 默认 | 更新日期: 2023-09-27 18:09:55
我理解结构是值类型,类是。net中的引用类型。我想知道是否有更好的解决办法。
,
public struct Holder
{
public double Value { get; set; }
public Holder()
{
this.Value = 0.0;
}
}
结构体的用法:
void SomeFunction(int n)
{
Holder[] valueHolders = new Holder[n];
...
valueHolders[0].Value = someValue;
}
这工作得很好。现在把Holder
变成class
。它抛出一个null
对象引用,因为valueHolders
将所有值都包含为null
。
现在我把代码改成
valueHolders[0] = new Holder();
valueHolders[0].Value = someValue;
很好。是否有办法在valueHolders
中一次创建所有元素,就像它是struct
类型时所做的那样
c#要求显式初始化引用类型。这可以很容易地在循环中完成:
Holder[] valueHolders = new Holder[n];
for (int i = 0; i < n; i++)
{
valueHolders[i] = new Holder();
}
你可以更进一步,在你的类上公开一个静态方法,像这样:
public class Holder {
static public Holder[] InitArray(ulong length) {
Holder[] holders = new Holder[length];
for (ulong i = 0; i < length; i++) {
holders[i] = new Holder;
}
return holders;
}
}
...
var valueHolders = Holder.InitArray(n);
你可以更进一步使用一个泛型扩展方法:
public static class ArrayInitializer
{
public static T[] Init<T>(this T[] array) where T : new()
{
for(int i = 0; i < array.Length; i++)
{
array[i] = new T();
}
return array;
}
}
...
var valueHolders = new Holder[n].Init();