using System;namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            if (false)
            {
                int i = 1;
            }            int i = 2;            System.Console.WriteLine(i.ToString());
        }
    }
}================上面代码有错误吗?我的VS.net 2005 SP1编译不了。
用Java测试:
            if (false)
            {
                int i = 1;
            }            int i = 2;
是完全没问题的。为什么C#有这个鬼问题?PS:我的VS.net2005 SP1是盗版的,麻烦哪位用正版的朋友试下!

解决方案 »

  1.   

    C#不支持这么写
    类似
    if(1)是编译不过的
      

  2.   

    C#不支持这么写
    类似
    if(1)是编译不过的
    ==================
    瞎说
    人家是if(false) 
    i变量的问题
      

  3.   


    if (false)
    {
    int i = 1;//这里已定义了一次
    }int i = 2;.//这里又定义了一次,为了避免在使用的上的不方便,C#编译器不允许这样在定义两次变量.因为它们的做用域相近.
      

  4.   

    int i;
    if (false)
    {
         i = 1;
    }i = 2;
    //这样就能过了…… 警告还是会有的……
      

  5.   

    hbxtlhx(平民百姓) ( ) 信誉:112    Blog  2007-03-29 14:20:23  得分: 0  
     
     
       
    if (false)
    {
    int i = 1;//这里已定义了一次
    }int i = 2;.//这里又定义了一次,为了避免在使用的上的不方便,C#编译器不允许这样在定义两次变量.因为它们的做用域相近.  
     
    ==============
    我觉得这样会让我更不方便。为这样写也不能编译:            if (false)
                {
                    for (int i = 0; i < 10; i++)
                    {
                    }
                }            int i = 2;
      

  6.   

    try 
    ========>
    if (false)
                {
                    for (int i = 0; i < 10; i++)
                    {
                    }
                }
    {
                int i = 2;
    }
      

  7.   

    C++和Java这样写都可以for (int j = 0; j < 10; j++ )
    {
        for (int i = 0; i < 10; i++)
        {    }
    }int i = 0;深两层都不行
      

  8.   

    c#这点上的规定个人觉得有点奇怪
    再switch里面也是
    一个case里面定义的局部变量,放到另一个case里就不需定义了
    但是想重新定义该变量 {}起来就好了
      

  9.   

    只能说C#编译器不够智能吧,也不是什么Bug
    但你为什么一定要写if (false)这种垃圾代码呢?
      

  10.   

    问下
    int i = 0;
    for (int j = 0; j < 10; j++ )
    {
        for (int i = 0; i < 10; i++)
        {    }
    }
    这样写行不行呢?呵呵
      

  11.   

    viena(维也纳n_n) ( ) 信誉:100    Blog  2007-03-29 14:29:40  得分: 0  
     
     
       只能说C#编译器不够智能吧,也不是什么Bug
    但你为什么一定要写if (false)这种垃圾代码呢?
      
     
    =========if( false ),我只是做测试用的。
    作用域应该是往下走才对的。如你告诉我说:
    int i = 2;
    if (false)
    {
        for (int i = 0; i < 10; i++)
        {
        }
    }
    这样写不行,我觉得还可以接受。但说
    if (false)
    {
        for (int i = 0; i < 10; i++)
        {
        }
    }
    int i = 2;
    这样写i的作用域还在if(false)的上面,有点难以接受。。
      

  12.   

    Java只是一种语言,
    而.NET要照顾多种语言,比如VB.NET
    VB中就没有这么细致的作用域划分~
      

  13.   

    viena(维也纳n_n) ( ) 信誉:100    Blog  2007-03-29 14:34:20  得分: 0  
     
     
       Java只是一种语言,
    而.NET要照顾多种语言,比如VB.NET
    VB中就没有这么细致的作用域划分~
      
     
    ===========我觉得C#这样的“规定”给人有种很不爽的感觉!
    不知道是叫它BUG好还是叫什么。
    正如在VC++6.0中这样写:for(int i=0; i<10; i++ ){}
    for(int i=0; i<10; i++ ){}就不可以编译通过一样。有种被强奸的感觉!
      

  14.   

    //八戒的解决方案还是有点意思if (false)
    {
        int i = 1;
    }{
        int i = 2;
    }不是所有东西存在都要找个道理
    编译的结果已经告诉你了是不是BUG都由微软说了算
      

  15.   

    > 为什么C#有这个鬼问题?看一下编译通不过的提示就知道原因了吧...