如何在C#中自动转换变量?

时间:2013-04-09 18:26:58

标签: c# .net vb.net

这是一个例子。

var tobeCasted = 1;
object data = null;

if (whatIsMyType == typeof(int)) {
    data = (int)tobeCasted;
}
else if (whatIsMyType == typeof(float)) {
    data = (float)tobeCasted;
}

但是,上述代码是手动检测每种数据类型的。 我正在寻找一个如下所示的一线通用解决方案:

 data = (whatIsMyType)tobeCasted;

4 个答案:

答案 0 :(得分:13)

使用Convert.ChangeType方法。 Convert课程的文档在这里;它包含许多有用的运行时type coercion方法。

http://msdn.microsoft.com/library/system.convert.aspx

那就是说,如果可以,尽量避免这种情况。这种运行时类型可以被认为是错误的code smell

答案 1 :(得分:11)

在这种特殊情况下,我认为你想要Convert.ChangeType

object data = Convert.ChangeType(toBeCasted, whatIsMyType);

当然,这只适用于有限的一组类型 - 但首先是铸造。如果您可以告诉我们更多关于您尝试做什么的信息,那将会很有帮助。可能有更好的方法。

答案 2 :(得分:1)

如果您将结果粘贴到Object类型的变量中,那就这样做吧。正如你现在所做的那样,你将转换为int / float / whatever,然后转换为Object。切掉中间人。

var tobeCasted = 1;
object data = tobeCasted;

答案 3 :(得分:0)

你的例子太难以理解你的真实需要了,但是像TypeMapper这样的东西更适合你的使用。