Кастинг (интервал?) пустой указатель по сравнению с новым интервалом? () - Который лучше?

Я использую Nullable<T> типы довольно много при загрузке значений в классы и структуры, когда мне нужны они, чтобы быть nullable, таким как загрузка nullable значения от базы данных (как пример ниже).

Рассмотрите этот отрывок кода:

public class InfoObject
{
    public int? UserID { get; set; }
}

// Load the ID into an SqlInt32
SqlInt32 userID = reader.GetSqlInt32(reader.GetOrdinal("intUserID"));

Когда я должен загрузить значение в nullable свойство, иногда я делаю это:

infoObject.UserID = userID.IsNull ? (int?)null : userID.Value;

Иногда я делаю это вместо этого:

infoObject.UserID = userID.IsNull ? new int?() : userID.Value;

Хотя они достигают того же результата, я хотел бы видеть, знает ли кто-либо, который лучше для использования между (int?)null и new int?() относительно производительности, наименьшего кода IL, лучшие практики и т.д.?

Обычно я одобрял new int?() версия кода выше, но я не уверен ли кастинг (int?)null более быстро, чтобы компилятор решил, чем new int?().

Удачи!

5
задан Codesleuth 11 February 2010 в 10:01
поделиться

1 ответ

Они будут генерировать один и тот же IL. Используйте тот, который вам легче читать.

Когда вы говорите о том, что что-то "быстрее решается компилятором", вы имеете в виду микрооптимизацию времени сборки build? Я понятия не имею, что там будет быстрее, но сомневаюсь, что это даст достоверно измеримую разницу для сколько-нибудь значительного объема кода.

Лично я использую null всегда, когда могу сделать это без двусмысленности; я думаю, что в целом я все еще предпочитаю приведение, чем вызов new, но реальной разницы нет.

8
ответ дан 14 December 2019 в 04:37
поделиться
Другие вопросы по тегам:

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