2014年4月18日

.NET に nullReplace() は不要

下記のような共通メソッドを作ったことはないだろうか。
特に Java 出身者なら・・・

/// <summary>
/// null の場合、replacement に変換する。
/// </summary>
public static T NullReplace<T>(this T source, T replacement)
{
    return source == null ? replacement : source;
}

.NET 2.0 からの ?? 演算子(null 合体演算子)の導入により、このメソッドは無用の長物になる。
(.NET 2.0 以降でないとこのメソッドは作れないが、それはスルーで)
?? 演算子は、null 許容型を便利に扱うため導入されたと思われるが、null 許容型だけでなく、普通の参照型にも使える。

// null 許容型
int? num = null;
int num2 = num ?? 0;
Console.WriteLine(num2); // 0

// null 許容型のみ GetValueOrDefault() でも同じことが可能
// ※メソッドなので、引数が必ず評価される点は注意
int num3 = num.GetValueOrDefault(0);
Console.WriteLine(num3); // 0

// 参照型
string text = null;
string text2 = text ?? "<null>"; // NullReplace() と同じ動作
Console.WriteLine(text2); // <null>

ちなみに VB では、2 引数の If 演算子を使う。
※これが使えるのは Visual Studio 2008 から

Dim text As String = Nothing
Dim text2 As String = If(text, "<null>") ' NullReplace() と同じ動作
Console.WriteLine(text2) ' <null>

というわけで、NullReplace() の導入はやめよう、という話。

0 件のコメント:

コメントを投稿