复古拟合新语言功能C#(或任何其他语言)

时间:2008-11-03 14:16:08

标签: c# resharper

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

当一个新的语言功能到来时,你会回过头来虔诚地将它应用到你现有的代码库中吗?或者你是否保留了最初编写的代码,接受如果使用新的语言功能编写新代码,代码中会出现不一致的情况?

4 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

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

建立在C#2上的C#3,两者完全兼容。因此,应该反映每次更新。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我离开了。除了它有很多工作之外,还有一个问题是代码真的相同或是否有新功能的副作用。

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

编辑:其实我错了var没有破坏东西,所以是的,我原来的建议是站立的。如果没有破产......

相关问题