c# - 适用于所有数据类型的动态 TryParse

标签 c# types converters tryparse

我需要检查一个对象是否可以转换为特定的数据类型,并想出了这个:

public static bool TryParseAll(System.Type typeToConvert, object valueToConvert)
{

    bool succeed = false;

    switch (typeToConvert.Name.ToUpper())
    {
        case "DOUBLE":
            double d;
            succeed = double.TryParse(valueToConvert.ToString(), out d);
            break;
        case "DATETIME":
            DateTime dt;
            succeed = DateTime.TryParse(valueToConvert.ToString(), out dt);
            break;
        case "INT16":
            Int16 i16;
            succeed = Int16.TryParse(valueToConvert.ToString(), out i16);
            break;
        case "INT":
            Int32 i32;
            succeed = Int32.TryParse(valueToConvert.ToString(), out i32);
            break;
        case "INT32":
            Int32 i322;
            succeed = Int32.TryParse(valueToConvert.ToString(), out i322);
            break;
        case "INT64":
            Int64 i64;
            succeed = Int64.TryParse(valueToConvert.ToString(), out i64);
            break;
        case "BOOLEAN":
            bool b;
            succeed = Boolean.TryParse(valueToConvert.ToString(), out b);
            break;
        case "BOOL":
            bool b1;
            succeed = bool.TryParse(valueToConvert.ToString(), out b1);
            break;
    }

    return succeed;
}

请问除了这个还有其他办法吗?哪个更动态、更高效?

谢谢!

最佳答案

您应该使用 TypeDescriptor 类:

public static T Convert<T>(this string input)
{
    var converter = TypeDescriptor.GetConverter(typeof(T));
    if(converter != null)
    {
        //Cast ConvertFromString(string text) : object to (T)
        return (T)converter.ConvertFromString(input);
    }
    return default(T);
}

当然,如果转换失败,这将抛出异常,因此您需要尝试/捕获它。

关于c# - 适用于所有数据类型的动态 TryParse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26135340/

相关文章:

C# Winform 在数据网格上搜索值错误

sql - 将表列的数据类型从时间戳更改为 bigint

用于将 .ini 文件转换为 .json 文件的 Javascript 库(客户端)

haskell - 显式类型转换?

haskell - 对Eta reduce的理解

android - 为 RetrofitSpiceService 配置转换器

java - MediaWiki 到纯文本转换

c# - 在 Asp.Net Web API 中将 JSON 反序列化为派生类型

c# - LINQ 中的左外连接

c# - 如何编写带有 namespace 和 XElement 前缀的 xml?