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

我想知道是否有更好的方法来初始化一个引用类型对象数组,就像这样。

Queue[] queues = new Queue[10]; for (int i = 0; i < queues.Length; i++) queues[i] = new Queue(); 

我尝试了Enumerable.Repeat,但是数组中的所有元素都引用了同一个实例,

 Queue[] queues = Enumerable.Repeat(new Queue(), 10).ToArray(); 

我也试过Array.ForEach,但没有ref关键字它不起作用:

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

还有其他想法吗?

你可以用这个:

 Enumerable.Range(0,10).Select(_=>new Queue()).ToArray() 

但IMO你的第一个例子也很好。

不,没有。 只需将其分解为实用方法:

 // CommonExtensions.cs public static T[] NewArray (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> (10) ; 

我有相同的答案 – 使用循环。 但是你可以把它作为通用的扩展方法:

  public static void Init(this IList array ) { if (array == null) return; for (int i = 0; i < array.Count; i++) array[i] = Activator.CreateInstance(); } 

刚才叫它:

  Queue[] queues = new Queue[10]; queues.Init();