有关C# 变量作用域问题 因为 test 声明, 和赋值靠着 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在声明时写成 string test=string.Empty;虽然你在for语句内赋了值,但在编译时,程序是不会for语句内的代码能否执行到的.因此会认为你没有赋值就使用了. namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int i; string test="";//第一行 for (i = 0; i < 10; i++) { test = "line"; Console.WriteLine(test); } Console.WriteLine(test ); Console.ReadKey(); } } } 千万记住,C#变量要赋初值 下面的那个等于给test赋了初值“line”而上面的那个没有赋初值,就直接进行下面的逻辑了,编译器会提示你那个警告,为了保持良好编程习惯,你就设置个初值吧,null,string.empty都行 Use of unassigned local variable 'test' 编译不能通过,怎么会没有关系呢? 赞成这个。。现在是找问题,不是说编程习惯的问题。实现不行你看下ildasm中的情况就知道了 如果没有初始值CLR 编译的时候 会为你的 string test =null;后面继续赋值的话还是要成功的,不过 会警告...使用了为赋值的test 目前编译器不会自动把你的循环展开,它不能确保循环里的代码一定会运行到。void MyMethod(int c){ for(int i=0; i<c; i++) { // 谁能确定这行一定运行的到? 如果c=0呢? }}因此,编译器不认可在循环,条件分支等中的赋初值代码,并产生“用了未赋值的局部变量”的编译错误。 这句话容易造成误解。编译器还是很聪明的,当所有条件分支都能给变量赋初值,该种初始化将被认可,比如下面的代码。但是,如果条件分支不能涵盖所有情况,初始化同样不被认可,比如反注释下面代码第6行后的情况。string str;if (Environment.TickCount % 2 == 1){ str = "hello";}else //if (Environment.TickCount %2 == 0 ){ str = "world";}MessageBox.Show( str ); static void Main(string[] args) { int i; string test;//第一行 for (i = 0; i < 10; i++) { test = "line"; Console.WriteLine(test); } Console.WriteLine(test); Console.ReadKey(); }注意如果使用局部变量则必须赋初始值,如果使用全局变量 则不需赋初始值 private int i; private string str; static void Main(string[] args) { int i; string test;//第一行 Program p = new Program(); Console.WriteLine(p.i + " " + p.str); }贴主的第二种情况static void Main(string[] args) { //int i; string test;//第一行 // for (i = 0; i < 10; i++) { test = "line"; Console.WriteLine(test); } Console.WriteLine(test ); Console.ReadKey(); } 注视了循环test 就复制了 急急急!找不到指定的模块。 (异常来自 HRESULT:0x8007007E)怎么解决, 求助,一个简单问题 求VS2010水晶报表下载!!! 如何在ListView单元中使用combobox进行编辑? 本人想搜索出整个硬盘的指定类型的文件(如TXT),还请各位热心帮忙解决,先谢了! 50分 菜鸟问题: 2005中 web移动from 如何让textbox得到焦点? 高分急求无刷新dropdownlist两级联动 C#遍历文件问题 如何查看已经建立的存储过程,想拿出来修改一下? 如何取得一年中第一周的周一的日期? 不能删除有内容的文件夹 匿名方法?
因此会认为你没有赋值就使用了.
{
class Program
{
static void Main(string[] args)
{
int i;
string test="";//第一行
for (i = 0; i < 10; i++)
{
test = "line";
Console.WriteLine(test);
}
Console.WriteLine(test );
Console.ReadKey();
}
}
} 千万记住,C#变量要赋初值
CLR 编译的时候 会为你的 string test =null;
后面继续赋值的话还是要成功的,不过 会警告...使用了为赋值的test
它不能确保循环里的代码一定会运行到。
void MyMethod(int c)
{
for(int i=0; i<c; i++)
{
// 谁能确定这行一定运行的到? 如果c=0呢?
}
}因此,编译器不认可在循环,条件分支等中的赋初值代码,
并产生“用了未赋值的局部变量”的编译错误。
这句话容易造成误解。编译器还是很聪明的,当所有条件分支都能给变量赋初值,
该种初始化将被认可,比如下面的代码。
但是,如果条件分支不能涵盖所有情况,初始化同样不被认可,比如反注释下面代码第6行后的情况。string str;
if (Environment.TickCount % 2 == 1)
{
str = "hello";
}
else //if (Environment.TickCount %2 == 0 )
{
str = "world";
}
MessageBox.Show( str );
{
int i;
string test;//第一行
for (i = 0; i < 10; i++)
{
test = "line";
Console.WriteLine(test);
}
Console.WriteLine(test);
Console.ReadKey();
}注意如果使用局部变量则必须赋初始值,如果使用全局变量 则不需赋初始值
private int i;
private string str;
static void Main(string[] args)
{
int i;
string test;//第一行
Program p = new Program();
Console.WriteLine(p.i + " " + p.str);
}贴主的第二种情况
static void Main(string[] args)
{
//int i;
string test;//第一行
// for (i = 0; i < 10; i++)
{
test = "line";
Console.WriteLine(test);
}
Console.WriteLine(test );
Console.ReadKey();
}
注视了循环test 就复制了