下記のような共通メソッドを作ったことはないだろうか。
特に Java 出身者なら・・・
.NET 2.0 からの ?? 演算子(null 合体演算子)の導入により、このメソッドは無用の長物になる。
(.NET 2.0 以降でないとこのメソッドは作れないが、それはスルーで)
?? 演算子は、null 許容型を便利に扱うため導入されたと思われるが、null 許容型だけでなく、普通の参照型にも使える。
ちなみに VB では、2 引数の If 演算子を使う。
※これが使えるのは Visual Studio 2008 から
というわけで、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 件のコメント:
コメントを投稿