Есть ли лучший способ написать эту строку кода C # в C # 3.0? - PullRequest
5 голосов
/ 07 августа 2009

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

public decimal? MyProperty { get; set; }

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

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

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

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

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

Ответы [ 5 ]

15 голосов
/ 07 августа 2009

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

var s = MyProperty.ToString(); // returns "" if MyProperty is null
1 голос
/ 07 августа 2009

Если все в порядке, если нулевое значение равно нулю, то:

(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
1 голос
/ 07 августа 2009

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

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

Затем вы можете вызвать его так:

MyProperty.Str()
1 голос
/ 07 августа 2009

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

    public decimal? MyProperty { get; set; }

    public string MyPropertyString
    {
        get
        {
            return MyProperty.HasValue ? MyProperty.Value.ToString() : null;
        }
    }
1 голос
/ 07 августа 2009

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

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