Ответ 1
Вы можете использовать Nullable<T>.ToString()
переопределить...
var s = MyProperty.ToString(); // returns "" if MyProperty is null
У меня есть свойство, объявленное следующим образом:
public decimal? MyProperty { get; set; }
Мне нужно передать это значение другому методу в виде строки, поэтому единственный способ, которым я это вижу, заключается в следующем:
MyProperty == null ? null : MyProperty.ToString()
Это выглядит очень грязно, когда у вас есть несколько похожих свойств, передаваемых в метод.
Кто-нибудь знает, есть ли лучший и более сжатый способ написать это?
О, и если кто-нибудь может подумать о более подходящем названии этого вопроса, не стесняйтесь его менять...
Вы можете использовать Nullable<T>.ToString()
переопределить...
var s = MyProperty.ToString(); // returns "" if MyProperty is null
Вы можете использовать HasValue вместо сравнения:
MyProperty.HasValue ? MyProperty.Value.ToString() : null;
Сделайте строку get свойствами класса, содержащего это свойство, и это не будет беспорядочно, вам нужно получить строчную версию.
public decimal? MyProperty { get; set; }
public string MyPropertyString
{
get
{
return MyProperty.HasValue ? MyProperty.Value.ToString() : null;
}
}
Вы можете объявить метод расширения в Decimal.
public static string Str(this decimal? value)
{
return value == null ? null : MyProperty.ToString()
}
Затем вы вызываете это следующим образом:
MyProperty.Str()
Если это нормально, имеет ноль istead из null, тогда:
(MyProperty ?? 0).ToString()
В противном случае добавьте метод расширения:
public static string AsString(this decimal? val)
{
return val == null ? null : val.Value.ToString();
}
// Use:
MyProperty.AsString() // This will NEVER cause NullReferenceException