xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Null 許容型の既定値付き文字列変換

タイトルはそれっぽいですが、大したことありません。何度も作るのがめんどくさいのでメモとして残しておこうというだけのカジュアルなものです。

Null 許容型の文字列化

Web でもクライアントでもそうですが、MVVM 的な考え方をする場合に「データとしては Null 許容型として渡すけど、null のときの表示文字列は View 側でよしなにして」というケースがよくあります。この場合、View (Razor とか) には以下のようなコードを書くでしょう。

//--- 何か Null 許容型の value という変数があったとする
value.HasValue ? value.ToString() : "---";

上記の例では値が null の場合に既定値として --- を入れています。C# 6.0 ならもっとスマートにこんな感じ。

value?.ToString() ?? "---";

拡張メソッド化

けれど、やっぱりこんなのを毎回書くのも美しくないです。ということでもっと楽をするために拡張メソッドを作っておきましょう。

public static class NullableExtensions
{
    public static string ToString<T>(this Nullable<T> self, string nullString)
        where T : struct
        => self?.ToString() ?? nullString;  //--- C# 6.0 で書いてるけど、if で書いてもいいのよ
}

これだけの準備で以下のように書けるようになります。

value.ToString("---");  //--- スッキリ!

ASP.NET MVC だとちょっと小細工しないと Razor で C# 6.0 を使えなかったりますし、世の中にはまだ C# 5.0 バンザイな方々もいっぱいいます。社内ライブラリにでもいいのでこういうのを入れておくと捗りますね!