2016-09-14 11 views
0

Допустим, у меня есть массив заработной платы работников в порядке средней, максимальной и мин:C# сбросить массив до его инициализированных значений?

int[] wages = {0, 0, Int32.MaxValue};

Приведенный выше код можно инициализировать так, что при Im найти макс я могу сделать сравнение с 0 и что-нибудь выше существующего значения побьет его и заменит. Итак, 0 отлично работает. Глядя на мин, если бы я установил это на 0, у меня возникла бы проблема. Сравнение заработной платы (все больше 0) и замены минимума самой низкой заработной платой будет невозможно, потому что ни одна из зарплат не будет ниже значения 0. Поэтому вместо этого я использовал Int32.MaxValue, потому что гарантировано, что каждая заработная плата будет ниже этого значения.

Это только один пример, но есть и другие, где было бы удобно сбросить и вернуть массив к его инициализированному содержимому. Есть ли синтаксис для этого в C#?

EDIT: @Shannon Holsinger нашел ответ с: wages = new int[] {0, 0, Int32.MaxValue};

+0

Я думаю, что заработная плата = {0, 0, Int32.MaxValue }; это самый простой способ сделать это. Если заработная плата имеет класс, вы можете поместить его в метод, называемый resetWages() или что-то еще. –

+0

@ShannonHolsinger, когда я делаю то, что он утверждает о моем форматировании. Ему не нравятся фигурные скобки или запятые. Просто нашел функцию под названием wages.Initialize(); и интересно, если это то, что я ищу –

+0

Нет, массивы не поддерживают «инициализированное состояние» и «текущее состояние». Есть только «текущее состояние». – itsme86

ответ

0

Короткий ответ, что это не встроенный способ сделать это. Структура не автоматически отслеживает начальное состояние вашего массива для вас, только его текущее состояние, поэтому у него нет способа узнать, как его повторно инициализировать в исходное состояние. Вы могли бы сделать это вручную, хотя. Точный подход к этому зависит от того, что ваш массив инициализирован в первую очередь:

 // 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); 
     } 
    } 
+0

Не могли бы вы объяснить, для чего нужен и что делает (T) по умолчанию? –

+0

@CapnJack - это сделать его общим. default (T) возвращает значение по умолчанию для любого типа T. Например, если T является int, значение по умолчанию (T) вернет 0. – EJoshuaS

+0

oh круто спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^