代码取自 here
我想听听一些专家对这种扩展方法的意见。我确实打算使用它,但想听听我可能会遇到的任何已知问题。
我对原始类型使用 TryParse 方法是否更好?
public static T? TryParse<T>(this object obj) where T : struct
{
if (obj == null) return null;
T? result = null;
TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
if (converter != null)
{
try
{
string str = obj.ToString();
result = (T)converter.ConvertFromString(str);
}
catch (Exception ex)
{
throw ex;
}
}
return result;
}
最佳答案
TryParse
模式最好遵循标准模式,它也允许与非结构一起使用:
public static bool TryParse<T>(string s, out T value) {
TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
try {
value = (T) converter.ConvertFromString(s);
return true;
} catch {
value = default(T);
return false;
}
}
请注意,我在这里接受了一个string
,因为这是我通常所说的TryParse
的意思;否则,Convert.ChangeType
可能更合适。
我认为没有理由将其作为扩展方法(根据问题示例中的 this
),当然不建议污染 object
扩展方法太多。
关于c# - 通用 TryParse 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1654871/