在一个方法中有多个同名的变量
本文关键字:变量 方法 一个 | 更新日期: 2023-09-27 18:17:06
我喜欢正确命名变量,但在某些情况下很难做到。
如果我的对象实现了IDisposable
那么我可以使用:
using (var whatever = new Whatever()) { //... }
但这是罕见的情况,所以我找到了另一种方法来处理它-匿名块(不确定它如何正确调用):
//...
{
var whatever = new Whatever();
//...
}
//...
if (condition)
{
var whatever = new Whatever();
}
这是一个好方法吗?是否存在缺陷或普遍认为它降低了代码的可读性?
基本上,如果编译器没有报错,并且你的代码易于阅读和理解,那就没有什么问题。
例如:foreach (var foo in foos)
{
var task = new FooTask(foo);
task.Run();
}
foreach (var bar in bars)
{
var task = new BarTask(bar);
task.Run();
}
这实际上(在我看来)比
更容易阅读foreach (var foo in foos)
{
var task1 = new FooTask(foo);
task1.Run();
}
foreach (var bar in bars)
{
var task2 = new BarTask(bar);
task2.Run();
}
我刚刚测试了你的代码,因为通常情况下,VSCodeAnalysis和r#和StyleCop紧盯着我的脖子,我本以为会有很多警告。但是没有。他们都保持沉默。因此,它似乎并不违反任何微软的编码准则。
然而:如果您需要创建多余的匿名块,只是为了避免由于变量名导致的编译器错误,这不再是容易和简单的。基本上,你是在躲避编译器,而隐藏永远解决不了问题。从我的观点来看,如果您为每个变量选择一个精确的名称(无论如何,根据类型命名并不是很好)并删除匿名块,那么代码将会更好。
遵循KISS原则:"保持简单,傻瓜"。
我会谨慎使用这种方法;它会妨碍可读性和可调试性。我以前遇到过这样的情况,我有两个断点监视两个不同的变量,而我以为我只监视一个变量。
c#强加的规则确保你的方法不使用不一致的名称是复杂的。如果您有兴趣了解更多有关它们的信息,请参阅: http://blogs.msdn.com/b/ericlippert/archive/tags/simple +名称/