.NET 4 でパラメーターのデフォルト値の有無を調べる


リフレクションでメソッドやコンストラクターのパラメーターのデフォルト値が定義されていなくても適当にデフォルト値を与えてやりたい場合,まずデフォルト値の有無を調べる必要があります。 .NET 4.5 には HasDefaultValue プロパティがあるので,簡単にチェックできるのですが, .NET 4 の場合は DefaultValue の型情報からデフォルト値の有無を調べることになります。

var defaultValue = parameterInfo.DefaultValue;
var hasDefaultValue = Type.GetType(defaultValue.GetType()) == TypeCode.DBNull;
var parameters = new object[] { hasDefaultValue ? defaultValue : CreateDefaultValue(parameterInfo) };
method.Invoke(obj, parameters);