String型から汎用型に変換しようとしています。ジェネリック型がそうでのInt32、Int64型、ブール型、ダブルとなります...私は2つのアプローチを試してみました:汎用型コンバータ - TypeConverterまたはConvert.ChangeType
public static Boolean TryParse<T>(String source, out T value) {
TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
try {
value = (T)converter.ConvertFromString(source);
return true;
} catch {
value = default(T);
return false;
}
}
public static Boolean TryChangeType<T>(Object source, out T value) {
try {
Type type = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);
value = (T)Convert.ChangeType(source, type);
return true;
} catch {
value = default(T);
return false;
}
}
それはオブジェクトを受け入れるように、第2の1がより一般的です。
また、文化問題を解決するためにConvert.ChangeTypeで使用されるTryChangeTypeにIFormatProviderを渡すことを検討しています。
2番目のアプローチをよりよく考えていますか?
どのようにしてコードを改善できますか?
[TypeConverterとConvert対TargetType.Parseの可能な複製](http://stackoverflow.com/questions/7010669/typeconverter-vs-convert-vs-targettype-parse) –