在C#中初始化动态大小数组的最简单的方法是什么?
这是我能想到的最好的
private bool[] GetPageNumbersToLink(IPagedResult result) { if (result.TotalPages <= 9) return new bool[result.TotalPages + 1].Select(b => true).ToArray(); ...
Nigel Touch.. 74
如果用'slickest'表示最快,我恐怕Enumerable.Repeat可能比for循环慢20倍.见http://dotnetperls.com/initialize-array:
Initialize with for loop: 85 ms [much faster] Initialize with Enumerable.Repeat: 1645 ms
所以使用Dotnetguy的SetAllValues()方法.
如果用'slickest'表示最快,我恐怕Enumerable.Repeat可能比for循环慢20倍.见http://dotnetperls.com/initialize-array:
Initialize with for loop: 85 ms [much faster] Initialize with Enumerable.Repeat: 1645 ms
所以使用Dotnetguy的SetAllValues()方法.
使用Enumerable.Repeat
Enumerable.Repeat(true, result.TotalPages + 1).ToArray()
编辑:作为一名评论者指出,我原来的实施没有奏效.这个版本可以工作,但是基于for循环是相当不光滑的.
如果您愿意创建扩展方法,可以试试这个
public static T[] SetAllValues(this T[] array, T value) where T : struct { for (int i = 0; i < array.Length; i++) array[i] = value; return array; }
然后像这样调用它
bool[] tenTrueBoolsInAnArray = new bool[10].SetAllValues(true);
作为替代方案,如果你对课堂闲逛感到满意,你可以试试这样的事情
public static class ArrayOf{ public static T[] Create(int size, T initialValue) { T[] array = (T[])Array.CreateInstance(typeof(T), size); for (int i = 0; i < array.Length; i++) array[i] = initialValue; return array; } }
你可以调用它
bool[] tenTrueBoolsInAnArray = ArrayOf.Create(10, true);
不确定我更喜欢哪种,虽然我总是使用lurv扩展方法.
我实际上会建议:
return Enumerable.Range(0, count).Select(x => true).ToArray();
这样您只需分配一个数组.这基本上是一种更简洁的表达方式:
var array = new bool[count]; for(var i = 0; i < count; i++) { array[i] = true; } return array;