Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#_Linq - Fatal编程技术网

C# 初始化引用类型对象数组的简明方法

C# 初始化引用类型对象数组的简明方法,c#,linq,C#,Linq,我想知道是否有更好的方法来初始化引用类型对象的数组,如下所示 Queue<int>[] queues = new Queue<int>[10]; for (int i = 0; i < queues.Length; i++) queues[i] = new Queue<int>(); Queue[]queues=新队列[10]; 对于(int i=0;iQueue=newqueue()); 还有其他想法吗?没有。只需将其分解为一个实用方法:

我想知道是否有更好的方法来初始化引用类型对象的数组,如下所示

Queue<int>[] queues = new Queue<int>[10];
for (int i = 0; i < queues.Length; i++)
    queues[i] = new Queue<int>();
Queue[]queues=新队列[10];
对于(int i=0;i
我尝试了枚举。重复,但数组中的所有元素都引用同一个实例

Queue<int>[] queues = Enumerable.Repeat(new Queue<int>(), 10).ToArray();
Queue[]queues=Enumerable.Repeat(new Queue(),10).ToArray();
我还尝试了Array.ForEach,但如果没有ref关键字,它就无法工作:

Queue<int>[] queues = Array.ForEach(queues, queue => queue = new Queue<int>());
Queue[]queues=Array.ForEach(queues,Queue=>Queue=newqueue());

还有其他想法吗?

没有。只需将其分解为一个实用方法:

// CommonExtensions.cs
public static T[] NewArray<T> (int length) where T : class, new ()
{
    var result = new T[length] ;
    for (int i = 0 ; i < result.Length ; ++i)
         result[i] = new T () ;
    return result ;
}

// elsewhere
var queues = Extensions.NewArray<Queue<int>> (10) ;
//CommonExtensions.cs
公共静态T[]NewArray(int-length),其中T:class,new()
{
var结果=新的T[长度];
for(int i=0;i
您可以使用以下方法:

Enumerable.Range(0,10).Select(_=>new Queue<int>()).ToArray()
Enumerable.Range(0,10)。选择(=>newqueue()).ToArray()

但是在我看来,你的第一个例子也很好。

我有同样的答案——使用循环。但您可以将其作为通用的扩展方法:

    public static void Init<T>(this IList<T> array )
    {
        if (array == null) return;

        for (int i = 0; i < array.Count; i++)
            array[i] = Activator.CreateInstance<T>();
    }
publicstaticvoidinit(此IList数组)
{
if(array==null)返回;
for(int i=0;i
这就是所谓的:

        Queue<int>[] queues = new Queue<int>[10];
        queues.Init();
Queue[]queues=新队列[10];
queues.Init();

我个人认为你的第一个例子完全可以接受。同意。循环有什么问题?我知道我的第一个示例完全正确,只是好奇是否还有其他选项。@L.B-看起来它会返回一个Queue@hatchet是的,这正是问题所在。在我看来,这种专门的帮助函数所带来的API膨胀通常是不值得的。这不是API。如果愿意,可以在内部类中声明它。