通用TryParse

我试图创建一个通用扩展,使用'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;

    }

}


手掌心
浏览 394回答 3
3回答

LEATH

使用try / catches进行流控制是一个糟糕的策略。抛出异常会导致性能下降,而运行时会解决该异常。而是在转换之前验证数据。var attemptedValue = "asdfasdsd";var type = typeof(int);var converter = TypeDescriptor.GetConverter(type);if (converter != null &&&nbsp; converter.IsValid(attemptedValue))&nbsp; &nbsp; return converter.ConvertFromString(attemptedValue);else&nbsp; &nbsp; return Activator.CreateInstance(type);
打开App,查看更多内容
随时随地看视频慕课网APP