Я использую 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?()
.
Удачи!
Они будут генерировать один и тот же IL. Используйте тот, который вам легче читать.
Когда вы говорите о том, что что-то "быстрее решается компилятором", вы имеете в виду микрооптимизацию времени сборки build? Я понятия не имею, что там будет быстрее, но сомневаюсь, что это даст достоверно измеримую разницу для сколько-нибудь значительного объема кода.
Лично я использую null
всегда, когда могу сделать это без двусмысленности; я думаю, что в целом я все еще предпочитаю приведение, чем вызов new
, но реальной разницы нет.