我有一个变量返回数据类型为Object
。有时,它返回datetime
,有时返回bool
等。
但我不想使用if ... else
语句列出所有可能性并转换为正确的数据类型。
使用convert.tostring(xxx)
,convert.toboolean(xxx)
?
答案 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)
您可以使用动态对象概念来实现此目的。
答案 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__
。