リフレクションでメソッドやコンストラクターのパラメーターのデフォルト値が定義されていなくても適当にデフォルト値を与えてやりたい場合,まずデフォルト値の有無を調べる必要があります。 .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);