[英]How to write a generic function in c#?
我正在嘗試在c#中編寫一個通用函數,該函數試圖根據類型解析字符串。
這是我嘗試過的
public static T convertString<T>(string raw)
{
if( typeof(T) == DateTime ){
DateTime final;
DateTime.TryParseExact(raw, "yyyy-mm-dd hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out final);
return final;
}
if( typeof(T) == int ){
int final;
Int32.TryParse(raw, out final);
return final;
}
}
如何更正此功能才能正常工作?
您可以嘗試這樣的事情:
public static T ConvertFromString<T>(string raw)
{
return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(raw);
}
// Usage
var date = ConvertFromString<DateTime>("2015/01/01");
var number = ConvertFromString<int>("2015");
編輯:支持TryConvert
否則,您可以創建一個函數來嘗試轉換輸入字符串:
public static bool TryConvertFromString<T>(string raw, out T result)
{
result = default(T);
var converter = TypeDescriptor.GetConverter(typeof (T));
if (!converter.IsValid(raw)) return false;
result = (T)converter.ConvertFromString(raw);
return true;
}
// Usage
DateTime result;
if (!TryConvertFromString<DateTime>("this is not a date", out result))
{
}
如果類型U實現IConvertible,您甚至可以更通用,而不依賴字符串參數-這意味着您必須指定兩個類型參數:
public static T ConvertValue<T,U>(U value) where U : IConvertible
{
return (T)Convert.ChangeType(value, typeof(T));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.