当使用生命周期极短且只需要调用一个方法的对象时,我倾向于将方法调用直接链接到 new
。一个非常常见的示例如下所示:
string noNewlines = new Regex("\\n+").Replace(" ", oldString);
这里的要点是,在完成一次替换后,我不再需要 Regex
对象,而且我希望能够将其表示为一行。这个成语有什么不明显的问题吗?我的一些同事对此表示不适,但没有任何似乎是好的理由。
(我已将其标记为 C# 和 Java,因为上述习语在两种语言中都很常见且可用。)
最佳答案
这个特殊的模式很好——我自己偶尔也会用到它。
但我不会像您在示例中那样使用这种模式。有两种更好的替代方法。
更好的方法:使用静态方法 Regex.Replace(string,string,string) .当可以使用执行相同操作的静态方法时,没有理由用 new
风格的语法来混淆您的意思。
最佳方法:如果您在同一个方法中使用相同的静态(不是动态生成的)Regex,并且多次调用该方法,则应将 Regex 对象存储为私有(private)静态字段在包含该方法的类上,因为这避免了在每次调用该方法时解析表达式。
关于c# - 有什么理由不使用 `new object().foo()` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502874/