我正在尝试在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;
}
}
如何更正此功能?
答案 0 :(得分:4)
你可以尝试这样的事情:
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))
{
}
编辑:支持TryConvert
否则,您可以创建一个尝试转换输入字符串的函数:
Mahout: Version 0.11.1
Spark: Version 1.5.0-cdh5.5.1
Java: 1.7.0_67
答案 1 :(得分:0)
如果类型U实现了IConvertible,你甚至可以做到更通用而不依赖于字符串参数 - 这意味着你必须指定两个类型参数:
public static T ConvertValue<T,U>(U value) where U : IConvertible
{
return (T)Convert.ChangeType(value, typeof(T));
}