EDIT: als Kommentator wies darauf hin, meine ursprüngliche Implementierung nicht funktionierte. Diese Version funktioniert, ist aber ziemlich unklug und basiert auf einer for-Schleife.
Wenn Sie bereit sind, eine Erweiterungsmethode zu erstellen, können Sie versuchen, diese
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;
}
und dann wie diese
bool[] tenTrueBoolsInAnArray = new bool[10].SetAllValues(true);
Als Alternative aufrufen, wenn Sie zufrieden sind mit einer Klasse herumhängen, könnten Sie etwas wie diese versuchen
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;
}
}
, die Sie wie
bool[] tenTrueBoolsInAnArray = ArrayOf<bool>.Create(10, true);
aufrufen kann nicht sicher, was ich bevorzugen, obwohl ich Lurv Erweiterungsmethoden Lose und Lose im Allgemeinen tun.
Nun, das ist einfach geil! – Rob
Ich denke, Nigel Leistungsvermerk garantiert eine Erwähnung - http://stackoverflow.com/questions/136836/c-array-initialization-with-non-default-value/1051227#1051227 – CrimsonX
Ich kann nicht glauben, dass Leute upvote für etwas, das ist so 'fuzzy' (meiner Meinung nach) und teuer für eine Operation so einfach wie das Füllen eines Arrays. 'var arr = neuer Typ [10]; für (int i = 0; i
Aidiakapi