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);
        }
    }
Другие вопросы по тегам