Скажите, пожалуйста, как использовать ключевое слово "default" в c # .net? - PullRequest
5 голосов
/ 25 мая 2010

У меня есть следующий код:

У меня есть перечисление:

public enum HardwareInterfaceType
{
    Gpib = 1,
    Vxi = 2,
    GpibVxi = 3,
}

и m, используя это перечисление вот так:

 HardwareInterfaceType type = default(HardwareInterfaceType);

скажите, пожалуйста, что здесь делает ключевое слово "default"? какая польза от этого?

Ответы [ 4 ]

7 голосов
/ 25 мая 2010

Я полагаю, что по умолчанию 0, поэтому у вас будет сгенерирован недействительный HardwareInterfaceType. Мне лично не нравится этот вид кодирования для перечислений. IMO, более ясно определить значение Enum «Undefined» или «None», а затем вместо этого инициализировать переменную.

Одним из "Gotchas" с перечислениями является то, что они могут быть инициализированы значением, которое не существует в перечислении. Первоначальный программист мог подумать, что enum будет инициализирован некоторым допустимым значением в определении Enum, если он использовал ключевое слово «default». Не верно, и IMO это не очень хорошее использование ключевого слова «по умолчанию» вообще.

var foobar = default(HardwareInterfaceType);
Console.WriteLine(Enum.IsDefined(typeof(HardwareInterfaceType), foobar)); //returns false
Console.WriteLine(foobar); //returns 0
5 голосов
/ 25 мая 2010

default предоставит значение по умолчанию для типа языка - в случае числовых значений и расширений нумерации. для ссылочных типов по умолчанию будет null.

Это чаще используется с дженериками, когда тип не известен заранее.

4 голосов
/ 25 мая 2010

ключевое слово по умолчанию в основном используется при написании универсального кода.

В общих классах и методах возникает одна проблема: как присвоить значение по умолчанию параметризованному типу T, если вы не знаете, будет ли T ссылочным типом или типом значения, и если T является типом значения это будет числовое значение или структура.

В вашем случае это присваивает 0.

    static void Main(string[] args)
    {

        HardwareInterfaceType type = default(HardwareInterfaceType);
        Console.WriteLine(type.ToString());

        type = HardwareInterfaceType.Gpib;
        Console.WriteLine(type.ToString());

        Console.ReadLine();
    }

    public enum HardwareInterfaceType
    {
        Gpib = 1,
        Vxi = 2,
        GpibVxi = 3,
    }

    //output
    0
    Gpib
2 голосов
/ 12 июля 2010

Я думаю, что ключевое слово по умолчанию используется, когда вам не нужно создавать новый экземпляр какого-либо объекта класса, скажем:

один путь похож на это

HardwareInterfaceType type = new HardwareInterfaceType();

и второй способэто также похоже на

HardwareInterfaceType type = default(HardwareInterfaceType);

Приведенный выше код создаст объект hardwareinterfacetype, но не создаст новую память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...