对象自动检测数据类型并转换为我需要的数据类型

时间:2014-02-13 08:51:33

标签: c#

我有一个变量返回数据类型为Object。有时,它返回datetime,有时返回bool等。

但我不想使用if ... else语句列出所有可能性并转换为正确的数据类型。

使用convert.tostring(xxx)convert.toboolean(xxx)

的任何方式

4 个答案:

答案 0 :(得分:2)

您可能需要调查Convert.ChangeType类中的Convert方法。

这是一个可能有帮助的小例子

namespace UnitTest
{
    using System;

    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(ConvertToType(DateTime.Now).GetType().Name);
            Console.WriteLine(ConvertToType<Guid>(Guid.NewGuid()).GetType().Name);
            Console.Read();
        }

        public static dynamic ConvertToType(object obj)
        {
            //If you're unsure of the type you want to return.
            return Convert.ChangeType(obj, obj.GetType());
        }

        public static T ConvertToType<T>(object obj)
        {
            //If you definitely know the type you want to return.
            return (T)Convert.ChangeType(obj, typeof(T));
        }
    }
}

答案 1 :(得分:0)

您可以使用动态对象概念来实现此目的。

dynamic object concept

答案 2 :(得分:0)

但我觉得你根本做不到,你可以用反射来写一个方法:

var test = variable.ConvertIt();

其中ConvertIt带有反射,可以在运行时强制转换变量并返回动态。但是现在你如何使用测试变量?

抱歉我的坏英语不好。

答案 3 :(得分:0)

这可能看起来很奇怪,但你的问题(不想使用if-else)在第一时间是特殊的。这似乎不可能以任何其他方式进行。创建数据类型是因为您不能仅使用变量来处理各种数据。这不仅是程序员的问题,也是编译器的问题。

try
{
    int a = convert.toint32(x);
    // Process a;
}
catch(Exception e)
{
    try
    {
        string b = convert.tostring(x);
        //Process b;
    }
    catch(Exception ex)
    {
        // and so on...
    }
}

此外,这可以根据需要使用Convert.To__