5

我有一个声明如下的属性:

public decimal? MyProperty { get; set; }

我需要将此值作为字符串传递给另一个方法,因此我看到的唯一方法如下:

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

当您将许多类似的属性传递给方法时,这看起来非常混乱。

有谁知道是否有更好,更简洁的写法?

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

4

5 回答 5

15

您可以使用Nullable<T>.ToString() 覆盖...

var s = MyProperty.ToString(); // returns "" if MyProperty is null
于 2009-08-07T04:31:48.633 回答
1

您可以使用 HasValue 而不是比较:

MyProperty.HasValue ? MyProperty.Value.ToString() : null;
于 2009-08-07T04:30:58.557 回答
1

使字符串在包含该属性的类上获取属性,并且您需要获取字符串版本不会很混乱。

    public decimal? MyProperty { get; set; }

    public string MyPropertyString
    {
        get
        {
            return MyProperty.HasValue ? MyProperty.Value.ToString() : null;
        }
    }
于 2009-08-07T04:32:35.043 回答
1

您可以在 Decimal 上声明扩展方法。

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

然后你这样称呼它:

MyProperty.Str()
于 2009-08-07T04:33:09.893 回答
1

如果可以使用零而不是 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
于 2009-08-07T04:37:53.783 回答