Возможно ли заставить оператор ** default (MyStructType) ** инициализировать структуру с предопределенными значениями - PullRequest
3 голосов
/ 21 ноября 2011

У меня есть тип структуры:

struct test1
{            
  public int a;
  public int b;
  public double c;
  public string d;
}

следующая строка дает мне «очистить» объект структуры, поля которого были инициализированы с их значениями по умолчанию:

test1 tt = default(test1);
// tt.a will be equal 0

Но теперь я хочуиметь возможность предопределять значения по умолчанию для некоторых полей в типе структуры.Например, я хочу, чтобы поле a имело 25 в качестве значения по умолчанию.

Возможно ли заставить default оператор инициализировать мою структуру с мои предопределенные значения по умолчанию ?

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

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

В этом фрагменте мы используем null-значение int, но открываеминт.Если значение вспомогательного поля равно нулю, мы знаем, что имеем дело с новым экземпляром / экземпляром по умолчанию и должны предоставить значения по умолчанию.

    struct test1
    {
        private int? a;

        public int A
        {
            get { return a ?? 25; }
            set { a = value; }
        }
    }
1 голос
/ 21 ноября 2011

Нет, это невозможно.

Различные типы уже имеют явные значения по умолчанию:

  • null для справочных типов.
  • 0 или 0,0 для целых и чисел с плавающей точкой.

Я считаю, что значение по умолчанию DateTime - это просто интерпретация вышеупомянутого для его внутренних полей (0 * 100 наносекунд от эпохи).

Вы не можете переопределить или изменить работу оператора default.

...