Сокращение, если + обнуляемые типы (C #) - PullRequest
7 голосов
/ 17 сентября 2008

следующие возвраты

Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между 'double' и ''

aNullableDouble = (double.TryParse(aString, out aDouble) ? aDouble : null)

Причина, по которой я не могу просто использовать aNullableBool вместо туда-обратно с aDouble, заключается в том, что aNullableDouble - это свойство сгенерированного класса EntityFramework, которое нельзя использовать как выходной.

Ответы [ 5 ]

9 голосов
/ 17 сентября 2008
aNullableDouble = double.TryParse(aString, out aDouble) ? (double?)aDouble : null;
7 голосов
/ 17 сентября 2008

Просто добавьте синтаксис в полный синтаксис вместо сокращения ... это будет легче читать:

aNullableDouble = null;
if (double.TryParse(aString, out aDouble))
{
    aNullableDouble = aDouble;
}
1 голос
/ 17 сентября 2008

Интересным побочным эффектом использования обнуляемых типов является то, что вы не можете использовать сокращенное IF. Сокращенный IF должен возвращать один и тот же тип из обоих условий, и он не может быть нулевым в любом случае. Так что, брось или выпиши это :)

1 голос
/ 17 сентября 2008
aNullableDouble = (double.TryParse(aString, out aDouble)?new Nullable<double>(aDouble):null)
0 голосов
/ 17 сентября 2008

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

Это также может не сильно помочь, если вам придётся слишком много конвертировать между обнуляемыми двойными и обычными двойными числами ... как это может быть легко в случае с автоматически сгенерированным набором классов.

...