.Net Standard 1.6中的TypeConverter替代方案

时间:2018-03-27 09:33:57

标签: c# exception-handling type-conversion .net-standard

我在项目中使用反射。

在某些情况下,我需要将从网页源检索到的字符串转换/转换为其他类型,如int等。

我用这个签名创建了方法:

internal static T GetData<T>(parameter,parameter)

因此,如果Framework-user想要​​获得int,请轻松使用GetData<int>

我想将异常处理添加到我的方法而不是try / catch

用于检查String是否可以强制转换为T。

问题是.NetStandard中没有TypeConverter类。

    TypeConverter typeConverter = TypeDescriptor.GetConverter(typeof(string));

    if (typeConverter.CanConvertTo(typeof(T)) == false)
    {
        throw new InvalidCastException("Can not convert");
    }

Error

我想检查转换,使用.Net的原生功能,不使用第三方库或尝试/捕获。 我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

一个简单的选择是更新到.NET Standard 2.0:

enter image description here

答案 1 :(得分:1)

我创建了这个扩展方法。

模拟TypeConverter

也许是疯了还是......? 但它适用于我。

我很高兴听到您对此解决方案的看法以及对此方法的更好的想法或补充。

        internal static bool CanConvertTo(this Type originType, Type destinationType)
        {
            if (originType == null)
            {
                throw new ArgumentNullException("parameter originType is null");
            }

            if (destinationType == null)
            {
                throw new ArgumentNullException("parameter destinationType is null");
            }


#if !(NETSTANDARD1_3 || NETSTANDARD1_6)
            TypeConverter typeConverter = TypeDescriptor.GetConverter(originType);

            if (typeConverter.CanConvertTo(destinationType) == false)
            {
                return false;
            }
#endif


#if NETSTANDARD1_3 || NETSTANDARD1_6
            try
            {
                object tester;
                tester = Convert.ChangeType(originType,destinationType);
            }
            catch
            {
                return false;
            }
#endif

            return true;
        }