Есть ли лучший способ написать эту строку кода С# в С# 3.0?

У меня есть свойство, объявленное следующим образом:

public decimal? MyProperty { get; set; }

Мне нужно передать это значение другому методу в виде строки, поэтому единственный способ, которым я это вижу, заключается в следующем:

MyProperty == null ? null : MyProperty.ToString()

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

Кто-нибудь знает, есть ли лучший и более сжатый способ написать это?

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

Ответ 1

Вы можете использовать Nullable<T>.ToString() переопределить...

var s = MyProperty.ToString(); // returns "" if MyProperty is null

Ответ 2

Вы можете использовать HasValue вместо сравнения:

MyProperty.HasValue ? MyProperty.Value.ToString() : null;

Ответ 3

Сделайте строку get свойствами класса, содержащего это свойство, и это не будет беспорядочно, вам нужно получить строчную версию.

    public decimal? MyProperty { get; set; }

    public string MyPropertyString
    {
        get
        {
            return MyProperty.HasValue ? MyProperty.Value.ToString() : null;
        }
    }

Ответ 4

Вы можете объявить метод расширения в Decimal.

public static string Str(this decimal? value)
{
    return value == null ? null : MyProperty.ToString()
}

Затем вы вызываете это следующим образом:

MyProperty.Str()

Ответ 5

Если это нормально, имеет ноль 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