动态,对象,Var

Gus*_*ori 7 c# var dynamic object

随着dynamic类型的开始和.NET 4中的DLR,我现在有3个选项来声明我称之为"开放"类型:

  • var,局部隐式类型强调"什么"而不是"如何",
  • object,别名System.Object
  • dynamic,禁用编译器检查,在运行时添加方法/属性

虽然那里有很多关于这些的文章,但我发现的并没有把它们放在一起,我不得不承认,它仍然有点模糊.

添加到这个LINQ,lambda表达式,匿名类型,反射......它变得更加不稳定.

我想看一些例子,也许是对比优势/劣势,帮助我巩固对这些概念的把握,并帮助我理解何时,何地以及如何在它们之间进行选择.

谢谢!

svi*_*ick 5

  • 使用var让您的代码短,更具可读性,或匿名类型时:

    var dict = new Dictionary<int, List<string>>();
    
    var x = db.Person.Select(p => new { p.Name, p.Age });
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用dynamic时动态绑定是有用的,或要求.或者,当您需要根据对象的运行时类型决定调用哪个方法时.

  • 使用object尽可能少,更喜欢使用特定类型或泛型.一个有用的地方是当你有一个用于锁定的对象时:

    object m_lock = new object();
    
    lock (m_lock)
    {
        // do something
    }
    
    Run Code Online (Sandbox Code Playgroud)