6

我喜欢正确命名的变量,但在某些情况下很难做到。

因此,如果我的对象实现了IDisposable,那么我可以使用:

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

但这种情况很少见,所以我找到了另一种处理方法 - 匿名块(不确定它是如何正确调用的):

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

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

4

3 回答 3

4

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

例如:

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();
}
于 2013-06-04T16:13:05.107 回答
1

我会谨慎使用这种方法;它会妨碍可读性和可调试性。过去我有过这样的情况,当我认为我正在查看一个变量时,我有两个断点查看两个不同的变量。

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

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

于 2013-06-04T17:05:20.970 回答
1

我刚刚测试了您的代码,因为通常情况下,VSCodeAnalysis 和 R# 和 StyleCop 会在我的脖子上喘不过气来,我会期待很多警告。但不是。他们都保持沉默。因此,它似乎并不违反任何 Microsoft 编码准则。

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

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

于 2013-06-04T16:24:36.500 回答