Используя nullable типы в C#

Вы должны определить thread в методе данных

data () {
  return {
    thread: {
      body: '',
    }
  }
}

Кроме того, голова должна быть определена как метод, а не как свойство.

head () {
  return {
    meta: [
      {
        hid: 'description',
        name: 'description',
        content: this.thread.body
      }
    ]
  }
}
9
задан Jon Seigel 7 April 2010 в 02:38
поделиться

8 ответов

Используйте формы, которые были особенно реализованы для Вас командой C#. Если кто-либо возражает, скажите им, что Anders сказал, что это было хорошо.

То, что я говорю, flippantly, то, что большая работа вошла в интеграцию nullable типов в c#, чтобы дать Вам хороший опыт программирования.

Обратите внимание, что с точки зрения производительности, обе формы компилируют вниз в тот же IL, т.е.:

int? i = 1;
bool isINull = i == null;
int j = (int)i;

Заканчивается как это после того, как компилятор C# будет иметь к нему:

int? i = 1;
bool isINull = !i.HasValue;
int j = i.Value;
12
ответ дан 4 December 2019 в 06:17
поделиться

Я использовал бы это:

long? i = 1;
...some code...
long j = i ?? 0;

Это означает, если я буду пустым, то чем 0 будет присвоен.

15
ответ дан 4 December 2019 в 06:17
поделиться

Я всегда использовал бы (я == пустой указатель) форма. Это выражает то, что Вы делаете.

WRT второй вопрос, я думаю, что любая форма прекрасна. Однако я всегда проверял бы его по пустому указателю сначала и принимал бы соответствующие меры - возможно, оборачивание той проверки и действия во вспомогательном методе (часто, это просто устанавливает значение по умолчанию).

8
ответ дан 4 December 2019 в 06:17
поделиться

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

1
ответ дан 4 December 2019 в 06:17
поделиться

Я не использовал Типы Nullable на практике, но для второго, я на самом деле предложил бы использовать j. GetValueOrDefault (). Документация предполагает, что последний на самом деле бросил бы InvalidOperationException в случае нулевого значения. В зависимости от внутренней реализации explict долгое время бросает оператор?, бывший мог бы, также. Я придерживался бы GetValueOrDefault и рассматривал бы пустой/по умолчанию случай соответственно.

4
ответ дан 4 December 2019 в 06:17
поделиться

Я обычно склонен склоняться к первой опции в обоих сценариях, так как это более 'примитивно', ориентировался настроенный против объектно-ориентированного (который был действительно, что мы шли для), но это действительно не имеет значения так очень

0
ответ дан 4 December 2019 в 06:17
поделиться

Открытый Отражатель. HasValue является поиском на булевом флаге, который установлен, когда значение изменяется. Таким образом с точки зрения циклов поиск будет быстрее, затем выдерживают сравнение.

public Nullable(T value)
{
    this.value = value;
    this.hasValue = true;
}

private bool hasValue;

internal T value;

public bool HasValue
{
    get
    {
        return this.hasValue;
    }
}
1
ответ дан 4 December 2019 в 06:17
поделиться

Они - оба то же, но я использовал бы бывшую версию на обоих, так как это более распространено в языке: сравнение с пустым указателем и бросающий к типу.

0
ответ дан 4 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: