C#中的动态或对象

时间:2014-03-19 14:35:28

标签: c# c#-4.0 object dynamic

我在c#中使用javascript dll来评估javascript范围。

现在,我总是通过字符串中的javascript dll返回评估结果。

但是,我打算改变它的方式。我创建了一个enum DataType

public enum DataType
{
    Integer,
    Decimal,
    Boolean,
    Text
}

因此,根据下拉列表中给定的数据类型,我将把结果转换为整数,十进制,布尔或文本。

当我进行演员表时,我应该返回动态还是int,decimal,bool或string的对象?

我对动态类型的理解并不是那么清楚。

3 个答案:

答案 0 :(得分:1)

不,动态类型适用于不同的用途。使用对象或为每个枚举类型添加泛型调用。

答案 1 :(得分:1)

您不必返回动态类型的对象。 您应该根据所选数据类型使用对象。

dynamic类型是一种将在运行时检查的类型,而不是在编译期间检查的类型。通常,它用于动态API,COM​​ API,Office API(互操作性库)等场景。我没有看到在你的场景中使用它的原因。

答案 2 :(得分:1)

如果你想要的是返回一个在运行时而不是在编译时确定其类型的值,你应该返回dynamic。这将允许您在没有C#的情况下使用所有适当类型的对象,从而给出编译时错误,并且可能使自己免于由于对象的不正确转换而导致的一些转换运行时错误。

public dynamic GetAnything(DataType dataType)
{
    switch(dataType)
    {
        case Integer:
            return 1;
        case Decimal:
            return 1.0;
        case Boolean:
            return true;
        case Text:
            return "1";
    }
}

这样你就可以:

var result = GetAnything(DataType.Text) + 1;

无需执行显式演员。

这并不像返回一个对象那样危险:

var result = (int)GetAnythingAsObject(DataType.Text) + 1;

这会导致运行时强制转换异常,因为对象实际上是一个字符串。与动态一样,这适用于支持+运算符的所有类型。

您可以在此msdn文章中详细了解objectdynamic之间的区别:http://blogs.msdn.com/b/csharpfaq/archive/2010/01/25/what-is-the-difference-between-dynamic-and-object-keywords.aspx

注意:动态需要.Net 4及以上