编译器错误 CS0136

无法在此范围内声明名为“var”的局部变量,因为它会为“var”提供不同的含义,该变量已在“父级或当前/子”作用域中使用,以表示其他内容

变量声明隐藏另一个声明,否则该声明位于作用域内。 重命名在生成 CS0136 的行上声明的变量。

示例:

以下示例生成 CS0136:

// CS0136.cs  
namespace MyNamespace  
{  
   public class MyClass  
   {  
      public static void Main()  
      {  
         int i = 0;  
         {  
            char i = 'a';   // CS0136, hides int i  
         }  
         i++;  
      }  
   }  
}  

编译器报告此错误,而不考虑变量声明的文本顺序,如以下示例所示:

// CS0136.cs  
namespace MyNamespace  
{  
   public class MyClass  
   {  
      public static void Main()  
      {
         if (true)
         {  
            int i = 1;   // CS0136, hides i outside this block
         }
         int i = 0;   
         i++;  
      }  
   }  
}  

C# 语言规范

局部变量声明空间和嵌套的局部变量声明空间包含具有相同名称的元素是错误的。 因此,在嵌套声明空间中,不可能在封闭声明空间中声明与局部变量或常量同名的局部变量或常量。 只要声明空间都不包含另一个声明空间,两个声明空间都可包含同名的元素。