1

使用我的 .Net 2.0 代码库时,ReSharper 不断建议应用最新的 c# 3.0 语言功能,最值得注意的是;将简单属性转换为自动实现属性或将局部变量声明为 var。在其他人中。

当一个新的语言特性到来时,你是返回并虔诚地将它应用到你现有的代码库中,还是让代码保持最初编写的状态,接受如果使用新语言特性编写新代码,你的代码之间会出现不一致?

4

4 回答 4

5

如果它没有坏,就不要修理它。当然,如果你对单元测试有信心,你可以试一试,但你真的不应该“仅仅因为”就随意更改代码。

当然 - 在某些情况下,简化代码是进行更改的正当理由 - 但即使是像切换到自动实现的属性这样无辜的事情也可能会破坏做出假设并使用反射直接更新字段的代码。或者它可能会破坏序列化。

更改为“var”实际上可以为您提供不同的(更具体的)类型,这可能会导致选择不同的方法重载等。

再说一次;这取决于您对单元测试的信心。

其他注意事项:

  • 团队的其他成员了解新语法了吗?
  • 您的项目是否需要支持 C# 2.0(例如,某些开源项目可能希望保持与 C# 2.0 的兼容性)。

如果这些都不是问题,您应该可以在新代码中使用新功能......在旧代码上点击“全部更新”之前要小心一点......

这是一个将“var”作为重大更改的简单示例:

    static void Main() {
        using (TextReader reader = File.OpenText("foo.bar")) { // [HERE]
            Write(reader);
        }
    }
    static void Write(TextReader reader) {
        Console.Write(reader.ReadToEnd());
    }
    static void Write(StreamReader reader) {
        throw new NotImplementedException();
    }

现在切换到var reader标记为[HERE]...的行

于 2008-11-03T14:20:47.117 回答
2

我会在我去的时候简单地维护代码。最终,大部分应用程序将被清理或调整到新功能和改进。不要为了改变而改变。如果您没有获得任何性能或稳定性改进,则无需浪费时间更新代码。

C# 3 基于 C# 2 构建,两者都非常兼容。因此,每次更新都应该得到反映。

于 2008-11-03T14:22:01.357 回答
1

我离开它,直到我改变那条线(或者通常只是它附近的线)。然后我升级。(有时我会更新整个类或文件,一旦我改变了其中一个)

于 2008-11-03T14:22:17.940 回答
0

我不管它。除了需要大量工作之外,还有一个问题是代码是否真的相同,或者新功能是否有副作用。

在 var 的特定情况下,编译器无论如何都会在编译时放入正确的类型,所以实际上没有任何好处。

编辑:实际上我对 var 不破坏事物是错误的,所以是的,我最初的建议是有效的。如果没坏...

于 2008-11-03T14:23:28.513 回答