了解c#中什么类型是动态变量

本文关键字:动态 变量 类型 什么 了解 | 更新日期: 2023-09-27 18:04:55

如何测试动态变量是否为双精度?

我需要这样做:

void someMethod(dynamic var1)
{
  if(var1.isDouble)
  {...
  }else if(var1 is int)
  // do something else....

}

了解c#中什么类型是动态变量

这种方法很好(即var1 is double),尽管这通常不是dynamic要完成的。更常见的是,当你知道类型将是什么时,你应该dynamic,但是很难或不可能在编译时显示(例如COM互操作场景,MVC中的ViewBag等),如果你想传递未知类型的变量,你可以只使用object。否则,运行时将在执行期间为您进行类型分析,如果这不是您需要的,这可能会对性能造成很大影响。

在一般情况下,可能会有场景,你想使用dynamic作为一个捕获所有的容器,但这似乎不是其中之一。在这种情况下,为什么不使用多个方法重载,每个方法都采用所需的类型:

void someMethod(double d) { ... }
void someMethod(int i) { ... }

此场景与dlev解释的dynamic关键字无关。

你的意思是:

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
    }
}

无论哪种方式,除非绝对需要,否则这通常是一个不好的做法。
你想要完成什么?

不应该这样做:

if(var1 is Double)

您可以使用is关键字:

检查类型是否为隐式转换为double。
if (var1 is double)