【问题标题】:Are implicitly-typed variables the way forward (C#)隐式类型变量是前进的方向(C#)
【发布时间】:2009-12-11 14:12:54
【问题描述】:

我在最初为 .net v2 编写的项目中使用 StyleCop for Resharper。但是我已经将这个项目升级为 3.5 框架。

Stylecop 建议我将大部分显式类型变量更改为隐式类型,例如:

字符串 - 变量

自定义强类型 - var

这是处理 .net 3.5 项目时的前进方向吗?将所有内容都声明为 var 似乎很不寻常。

如果我的术语用完了,请随时更新问题标题...

【问题讨论】:

标签: c# var implicit-typing


【解决方案1】:

那些不是泛型,它们是隐式类型变量。这在很大程度上是一个品味问题。有些地方你可以过度使用var,有些地方显然是必要的(想想匿名类型),所以只要在中间找到适合你(和你的团队)偏好的地方。

【讨论】:

    【解决方案2】:

    在很多地方都进行了辩论,这取决于品味。比较这两行代码:

    StringBuilder stringBuilder = new StringBuilder();
    var stringBuilder = new StringBuilder();
    

    你更喜欢哪个?

    【讨论】:

    • 这个很明显,但是当涉及到var foo = 0m;时,我会更加小心。
    • 正确。像 ReSharper 这样的工具不会为这种声明建议 var。
    • 为什么你会更小心var foo = 0m;?肯定是明确地声明了一个decimal 变量吗?
    【解决方案3】:

    看看这个

    var (C# Reference)

    Implicitly Typed Local Variables (C# Programming Guide)

    隐式类型的局部变量是 强类型,就像你有 自己声明了类型,但是 编译器确定类型。

    也可以看看Use of var keyword in C#

    C# Debate: When Should You Use var?

    【讨论】:

      【解决方案4】:

      我认为这更多是一个建议,应该考虑,但不一定完全实施。

      虽然我个人认为 var 的最佳用途是在声明/返回类型很明显时,即:

      var temp = "Test me now";
      

      对比

      var temp = GetTestData();
      

      我也很喜欢用更少的代码声明泛型类型:

          var test = new Dictionary<string,string>();
      

          Dictionary<string, string> test = new Dictionary<string,string>();
      

      【讨论】:

        【解决方案5】:

        var 在使用时非常重要,例如匿名类型...

        var cees = from c in Customers select new { c.Name, c.Birthdate };
        

        Resharper 会建议将 all 更改为 var。对于明显的定义,例如

        var c = new Customer();
        

        我喜欢使用它。 对于某些 API 调用,我可能会明确写下类型:

        Customer c = repository.Get(1);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-06
          • 2016-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多