你可以在分析方法通過爲通用情況:
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 });
}
恐怕沒有。 – MarcinJuraszek
我的一般做法是將'T'約束爲'IConverible',並使用'Convert.ChangeType'並將其轉換爲T來處理。但是,如果您的價值以$$開頭,除非您剝離美元符號,否則幾乎總是無法解析。 – vcsjones
@vcsjones我認爲這就是爲什麼當'value'以'$$'開始時他返回'defaultValue'的原因。 – MarcinJuraszek