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是盗版的,麻烦哪位用正版的朋友试下!
{
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是盗版的,麻烦哪位用正版的朋友试下!
类似
if(1)是编译不过的
类似
if(1)是编译不过的
==================
瞎说
人家是if(false)
i变量的问题
if (false)
{
int i = 1;//这里已定义了一次
}int i = 2;.//这里又定义了一次,为了避免在使用的上的不方便,C#编译器不允许这样在定义两次变量.因为它们的做用域相近.
if (false)
{
i = 1;
}i = 2;
//这样就能过了…… 警告还是会有的……
if (false)
{
int i = 1;//这里已定义了一次
}int i = 2;.//这里又定义了一次,为了避免在使用的上的不方便,C#编译器不允许这样在定义两次变量.因为它们的做用域相近.
==============
我觉得这样会让我更不方便。为这样写也不能编译: if (false)
{
for (int i = 0; i < 10; i++)
{
}
} int i = 2;
========>
if (false)
{
for (int i = 0; i < 10; i++)
{
}
}
{
int i = 2;
}
{
for (int i = 0; i < 10; i++)
{ }
}int i = 0;深两层都不行
再switch里面也是
一个case里面定义的局部变量,放到另一个case里就不需定义了
但是想重新定义该变量 {}起来就好了
但你为什么一定要写if (false)这种垃圾代码呢?
int i = 0;
for (int j = 0; j < 10; j++ )
{
for (int i = 0; i < 10; i++)
{ }
}
这样写行不行呢?呵呵
只能说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)的上面,有点难以接受。。
而.NET要照顾多种语言,比如VB.NET
VB中就没有这么细致的作用域划分~
Java只是一种语言,
而.NET要照顾多种语言,比如VB.NET
VB中就没有这么细致的作用域划分~
===========我觉得C#这样的“规定”给人有种很不爽的感觉!
不知道是叫它BUG好还是叫什么。
正如在VC++6.0中这样写:for(int i=0; i<10; i++ ){}
for(int i=0; i<10; i++ ){}就不可以编译通过一样。有种被强奸的感觉!
{
int i = 1;
}{
int i = 2;
}不是所有东西存在都要找个道理
编译的结果已经告诉你了是不是BUG都由微软说了算