3

这是一个例子。

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

4 回答 4

13

使用Convert.ChangeType方法。该Convert课程的文档在这里;它包含许多用于运行时类型强制的有用方法。

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

也就是说,如果可以的话,尽量避免这种情况。这种运行时类型可以被认为是不好的代码气味

于 2013-04-09T18:32:10.000 回答
11

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

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

当然,这仅适用于有限的类型集 - 但首先也是如此。如果您能告诉我们更多关于您正在尝试做的事情,那将会很有帮助。很可能有更好的方法。

于 2013-04-09T18:30:50.917 回答
1

如果您将结果粘贴到 type 的变量中Object,请执行此操作。正如您现在所拥有的那样,您将转换为 int/float/whatever,然后转换为 Object。剪掉中间人。

var tobeCasted = 1;
object data = tobeCasted;
于 2013-04-09T18:30:10.823 回答
0

您的示例太琐碎,无法理解您的真正需求,但也许像 TypeMapper 这样的东西更适合您的使用。

于 2013-04-16T18:27:06.557 回答