一般的なケースの parse メソッドを渡すことができます。
static T MyParameter<T>(string value, T defaultValue, Func<string, T> parse)
{
return value.StartsWith("$$") ? defaultValue : parse(value);
}
ただし、便宜上、使用する予定の最も一般的な型にオーバーロードを提供することをお勧めします。
static int MyParameter(string value, int defaultValue)
{
return MyParameter(value, defaultValue, int.Parse);
}
static DateTime MyParameter(string value, DateTime defaultValue)
{
return MyParameter(value, defaultValue, DateTime.Parse);
}
static string MyParameter(string value, string defaultValue)
{
return MyParameter(value, defaultValue, x => x);
}
これが本当に気に入らない場合は、リフレクションを使用できますが、お勧めしません。
static T MyParameter<T>(string value, T defaultValue)
{
if (value.StartsWith("$$"))
{
return defaultValue
}
var method = typeof(T).GetMethod("Parse", new[] { typeof(string) });
return (T)method.Invoke(null, new[] { value });
}