C# сбросить массив до его инициализированных значений?
Допустим, у меня есть массив заработной платы сотрудников в следующем порядке: средняя, максимальная и минимальная:
int[] wages = {0, 0, Int32.MaxValue};
Приведенный выше код инициализируется, так что, когда я нахожу максимум, я могу сделать сравнение с 0 и любым значением выше существующего значения, которое превзойдет его и заменит. Так что 0 отлично работает здесь. Глядя на мин, если бы я установил это на 0, у меня возникла бы проблема. Сравнение заработной платы (все больше 0) и замена минимальной наименьшей заработной платы будет невозможным, поскольку ни одна из заработных плат не будет ниже значения 0. Поэтому вместо этого я использовал Int32.MaxValue, потому что он гарантированно, что каждая зарплата будет ниже этого значения.
Это только один пример, но есть другие, где было бы удобно сбросить и вернуть обратно к его инициализированному содержимому. Есть ли синтаксис для этого в C#?
РЕДАКТИРОВАТЬ: @Shannon Holsinger нашел ответ с: wages = new int[] {0, 0, Int32.MaxValue};
1 ответ
Короткий ответ - нет встроенного способа сделать это. Фреймворк не отслеживает автоматически начальное состояние вашего массива, а только его текущее состояние, поэтому у него нет возможности узнать, как повторно инициализировать его в исходное состояние. Вы можете сделать это вручную, хотя. Точный подход к этому зависит от того, к чему был инициализирован ваш массив:
// Array will obviously contain {1, 2, 3}
int[] someRandomArray = { 1, 2, 3 };
// Won't compile
someRandomArray = { 1, 2, 3 };
// We can build a completely new array with the initial values
someRandomArray = new int[] { 1, 2, 3 };
// We could also write a generic extension method to restore everything to its default value
someRandomArray.ResetArray();
// Will be an array of length 3 where all values are 0 (the default value for the int type)
someRandomArray = new int[3];
Метод расширения ResetArray находится ниже:
// The <T> is to make T a generic type
public static void ResetArray<T>(this T[] array)
{
for (int i = 0; i < array.Length; i++)
{
// default(T) will return the default value for whatever type T is
// For example, if T is an int, default(T) would return 0
array[i] = default(T);
}
}