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 の代わりに 0 を使用しても問題ない場合は、次のようになります。

(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 に答える