有没有更好的方式来写C#3.0中此行的C#代码?(Is there a better way to

2019-07-31 14:03发布

我有一个属性声明如下:

public decimal? MyProperty { get; set; }

我需要为这个值我看这样做是如下的唯一途径传递给另一个方法为一个字符串,那么:

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

当你有被传递到一个方法中的多个类似性质的这看起来很凌乱。

有谁知道是否有写这更好,更简洁的方式?

哦,如果有人能想到一个更合适的标题的这个问题请随时改变它...

Answer 1:

您可以使用Nullable<T>.ToString() 重写 ...

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


Answer 2:

你可以使用的HasValue而不是比较:

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


Answer 3:

使字符串获得包含属性类的属性和它不会乱文,你需要得到的字符串版本。

    public decimal? MyProperty { get; set; }

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


Answer 4:

如果确定有零istead空的,那么:

(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


Answer 5:

你可以声明对十进制的扩展方法。

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

然后调用它像这样:

MyProperty.Str()


文章来源: Is there a better way to write this line of C# code in C#3.0?