如何测试动态变量是否为双倍?
我需要做类似的事情:
void someMethod(dynamic var1)
{
if(var1.isDouble)
{...
}else if(var1 is int)
// do something else....
}
答案 0 :(得分:8)
这种方法很好(即var1 is double
),尽管这通常不是dynamic
要完成的。更常见的情况是,当 知道类型将是什么时,你应dynamic
,但在编译时很难或不可能显示(例如COM互操作方案,{{1}在MVC中等等。)如果要传递未知类型的变量,可以使用ViewBag
。否则,运行时将在执行期间为您进行类型分析,如果不是您需要的话,这可能是一个很大的性能损失。
通常情况下,您可能希望将object
用作全能容器,但这似乎不是其中之一。在这种情况下,为什么不使用多个方法重载,每个方法都采用所需的类型:
dynamic
答案 1 :(得分:3)
此方案与dynamic
关键字explained by dlev无关。
你的意思是:
void someMethod(object o)
{
if (o is double) {
double d = (double)o;
// do something with d
} else if (o is int) {
int i = (int)o;
// do something with i
}
}
无论哪种方式,除非绝对需要,否则这通常是一种不好的做法 你想要完成什么?
答案 2 :(得分:0)
不应该这样做:
if(var1 is Double)
答案 3 :(得分:0)
您可以使用is
关键字检查类型是否隐式可转换加倍:
if (var1 is double)