仕事で、こんなコードを見かけました
private static void test(string a = null) { Console.WriteLine("argument = " + a); }
メソッドを呼び出す時引数を省略した場合、引数はnullになります。
すると、例外になるから、ヤバくない? って。
ですが、このメソッド正しく動作します。
ただ、怖いですね。
製品からサービスとして意味合いが強くなった現代では頻繁に改修がされます。
そこで、あまり考えずに、以下みたいに改修したら、例外になります。
private static void test(string a = null) { Console.WriteLine("argument = " + a); Console.WriteLine("length = " + a.Length); }
こんなコードがリリースされると、どーして確認しなかったんだ、再発防止案だせーと大騒ぎになるわけですが、そもそも地雷を埋めた方が悪いでしょう。
あらかじめ手を打っておくべきです。
やはり危ないコードなので避けるべきでしょう。
デフォルト値にstring.Emptyを使いたいところですが、引数にはstring.Emptyは使えませんので、デフォルト値に使うとしたら""でしょうか。
private static void test(string a = "") { Console.WriteLine("argument = " + a); Console.WriteLine("length = " + a.Length); }
もしくは、メソッドを一つ増やして、引数なしのメソッドを用意してあげるかですかね。ここまで来ると大掛かりな気もします。
private static void test() { test(""); }
おまけ
stringではなく、nullの任意のクラスオブジェクトをConsole.WriteLineさせても例外になりません。
using System; public class Program { public class Person { public string Name {get; set;} } public static void Main() { test(); } private static void test(Person a = null) { Console.WriteLine("start"); Console.WriteLine(a); Console.WriteLine("end"); } }