为了账号安全,请及时绑定邮箱和手机立即绑定

通用TryParse

通用TryParse

C#
手掌心 2019-10-06 14:36:01
我试图创建一个通用扩展,使用'TryParse'检查字符串是否为给定类型:public static bool Is<T>(this string input){    T notUsed;    return T.TryParse(input, out notUsed);}由于无法解析符号“ TryParse”,因此无法编译据我了解,“ TryParse”不是任何接口的一部分。这有可能吗?更新:使用下面的答案,我想出了:public static bool Is<T>(this string input){    try    {        TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(input);    }    catch    {        return false;    }    return true;}它工作得很好,但是我认为以这种方式使用异常对我来说不合适。更新2:修改为传递类型,而不是使用泛型:public static bool Is(this string input, Type targetType){    try    {        TypeDescriptor.GetConverter(targetType).ConvertFromString(input);        return true;    }    catch    {        return false;    }}
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

使用try / catches进行流控制是一个糟糕的策略。抛出异常会导致性能下降,而运行时会解决该异常。而是在转换之前验证数据。


var attemptedValue = "asdfasdsd";

var type = typeof(int);

var converter = TypeDescriptor.GetConverter(type);

if (converter != null &&  converter.IsValid(attemptedValue))

    return converter.ConvertFromString(attemptedValue);

else

    return Activator.CreateInstance(type);


查看完整回答
反对 回复 2019-10-06
  • 3 回答
  • 0 关注
  • 392 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信