EDIT: como un comentarista señaló, mi implementación original no funcionó. Esta versión funciona, pero no está muy bien, ya que se basa en un ciclo for.
Si usted está dispuesto a crear un método de extensión, puede probar con este
public static T[] SetAllValues<T>(this T[] array, T value) where T : struct
{
for (int i = 0; i < array.Length; i++)
array[i] = value;
return array;
}
e invocarla como esto
bool[] tenTrueBoolsInAnArray = new bool[10].SetAllValues(true);
Como alternativa, si estás contento con teniendo una clase dando vueltas, podrías probar algo como esto
public static class ArrayOf<T>
{
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;
}
}
que se puede invocar como
bool[] tenTrueBoolsInAnArray = ArrayOf<bool>.Create(10, true);
No estoy seguro de que yo prefiero, aunque me lurv métodos de extensión de los lotes y lotes en general.
¡Eso es simplemente resbaladizo! – Rob
Creo que la nota de rendimiento de Nigel merece una mención: http://stackoverflow.com/questions/136836/c-array-initialization-with-non-default-value/1051227#1051227 – CrimsonX
No puedo creer que las personas voten a favor de algo que es tan 'difusa' (en mi opinión) y costosa para una operación tan simple como llenar una matriz. 'var arr = new type [10]; for (int i = 0; i
Aidiakapi