c# - 我应该使用动态关键字来优化转化吗?

标签 c# dynamic

我有简单的类层次结构(基类 A、派生类 B:A、派生类 C:A 等)。我有以下代码:

void computation(A base_class)
{
    if (base_class is B)
    {
        //Do some stuff with (base_class as B)
    }
    if (base_class is C)
    {
        //Do some stuff with (base_class as C)
    }
}

我想起了c#语言的dynamic关键字。据我了解,我可以使用以下代码(以优化额外转化)。

void computation(A base_class)
{
    dynamic temp = base_class as B;
    if (temp != null)
    {
        //Do some stuff with temp
    }
    temp = base_class as C;
    if (temp != null)
    {
        //Do some stuff with (base_class as C)
    }
}

哪种变体更适合使用?这些方法的性能如何?

最佳答案

这听起来像是过早的优化,我不喜欢这里的 dynamic 用法。

还要记住 dynamic 会做一些特定的事情,比如(引用自 MSDN):

The dynamic type enables the operations in which it occurs to bypass compile-time type checking. Instead, these operations are resolved at run time.

所以我想绕过编译时类型检查不是你想要的。

我建议改用 var。恕我直言,它提高了可读性,调试更容易,使用 as 而不是 is + casting 也更快一些。

void computation(A base_class)
{
    var b = base_class as B;
    if (b != null)
    {
        //Do some stuff with temp
    }
    var c = base_class as C;
    if (c != null)
    {
        //Do some stuff with (base_class as C)
    }
}

关于c# - 我应该使用动态关键字来优化转化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39150122/

相关文章:

ruby-on-rails - 在 Rails 中设置静态路由

c# - 如何创建用于添加数据集合的动态表单?

c# - 如何限制每次安装只能使用一台计算机?

c# - XNA-相对于世界移动旋转相机( View )

c# - 我可以在终结器中安全地访问引用类型实例字段/属性吗?

ios - 将静态 Objective-C 框架转换/包装成可在 Swift 项目中使用的动态框架

c# - 为什么 List.Contains 不能像我预期的那样工作?

c# - 使用拥有的类型时,Entity Framework Core 尝试连接到不存在的表

c# - .NET 编译程序集来源 : Determine which source failed?

winforms - TreeView 填充/绑定(bind)