2013-06-04 176 views
5

我喜欢正确命名的变量,但在某些情况下很难做到。一个方法中具有相同名称的多个变量

所以,如果我的对象实现IDisposable然后我可以使用:

using (var whatever = new Whatever()) { //... } 

但它是罕见的情况,所以我找到了另一种方式来处理它 - 匿名块(不知道如何正确调用):

//... 
{ 
    var whatever = new Whatever(); 
    //... 
} 
//... 
if (condition) 
{ 
    var whatever = new Whatever(); 
} 

这是一个很好的方法吗?是否有任何陷阱或普遍认为它会降低代码的可读性?

+2

即使我已经阅读了问题,什么它会被用于,而不是什么它是从宣布后,为什么不命名变量? –

+2

为什么你不能只是覆盖'无论'? 'var whatever = new(); ... whatever = new(); ...' – SimpleVar

+4

通常情况下,我会将方法分成不同的方法,至少在很多情况下。 –

回答

3

基本上,如果编译器没有抱怨,并且你的代码是可读的并且易于理解,那没有什么问题。

例如:

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(); 
} 
+1

'var task = foo?新的FooTask():新的BarTask(); task.Run();在这种情况下,似乎对我来说是最易读的。但是如果它们不实现一些'IRunnableTask'接口或类似的东西,那么这是不可能的。 – SimpleVar

+1

@YoryeNathan是的,我同意,我只是试图提出一个适合OP的问题的案例。我用'foreach'块更新了我的答案,这说明了这点好一点。 –

+0

我从不使用枚举变量名称,因为我认为在命名转换中也是不好的做法。所以在这种情况下,更好的名字将会更好地发现可变的使用目的。但在我的情况下,变量变得奇怪而且太长了 – Vladimirs

1

我只是测试你的代码,因为通常情况下,用VSCodeAnalysis和r#和StyleCop的呼吸在我的脖子上,我会期待很多警告。但不是。他们都保持沉默。所以它似乎没有反对任何微软编码指南。

但是:如果您为了避免由于变量名造成的编译错误而需要创建多余的匿名块,它不再容易和简单。基本上,你隐藏了编译器,隐藏永远不会解决问题。从我的角度来看,如果为每个变量选择一个精确的名称(将其命名为类型并不是很好),那么这将会是更好的代码,并删除匿名块。

遵循KISS原则:“保持简单,愚蠢”。

1

我会对这种方法持谨慎态度;它可能会妨碍可读性和可调试性。过去我曾经遇到过两种情况,当我以为我在观看两个不同的变量时,我有两个断点。

C#强加的有助于确保您的方法不会不一致地使用名称的规则很复杂。如果您有兴趣了解更多关于他们,请参阅:

http://blogs.msdn.com/b/ericlippert/archive/tags/simple+names/

相关问题