if(){
String var=1;
if(var==-1){
//do this
}
else
{
if()
{
String myString=var; //This is where I want to use var
}
}
}
现在myString没有被分配var..why的值是什么?它嵌套if..it应该得到值..不是吗?
答案 0 :(得分:5)
以下代码似乎工作正常:
if (true)
{
String var = "1";
if (var == "-1") {/*DoSomething()*/ }
else
{
if (true)
{
String myString = var; //Gives 1 in myString!
MessageBox.Show(myString);
}
}
}
Variable and Method Scope in Microsoft .NET是了解范围界定的一个很好的参考 作品。
顺便说一句,var
是3.5及以上版本中使用的类型;应该避免命名类似于类型名称的变量。
答案 1 :(得分:3)
你的问题很模糊而且无益,但也许你应该记住:
int n;
if (true) {
// you can access/change n from here no problem
int f;
} else {
// can't access f here, if that answers your question
}
//you cannot access f, it no longer exists.
坦率地说,声明变量的{}以外的任何东西都不会知道它(即使没有条件/循环)。 里面的任何都会。
答案 2 :(得分:1)
忽略所有语法错误,
假设底部的“if”计算结果为“true”,并且var不等于-1(你真的应该在那里放一个断点,看看调试器是否达到了那个赋值) 。 myString将获得var的值。但是请注意,一次在块外(在下一个“}”之后)myString doest不再存在。
还要注意所有语法错误(使用“var”这是一个关键字,将int分配给字符串...)
答案 3 :(得分:1)
myString必须获取var的值。如果没有,请检查您的条件。
答案 4 :(得分:1)
通常,当您声明一个变量时,它可以在...中定义的scop中访问
在您的示例中,var
(您不能使用此名称,因为这是VS2008中的保留字)可以访问所有其他if
块中的那些块。
答案 5 :(得分:1)
使用C#语言(和其他)处理关键字:)
答案 6 :(得分:0)
除了避免使用关键字之外,我唯一可以立即看到将var指定为myString值的错误是你的示例文字不是双引号。 (我假设你在访问之前没有遇到myString被破坏的问题,因为你说它没有返回与var相同的值。如果你试图从外部访问myString,那么你初始化它在,你需要在本地初始化它比你现在少)
字符串文字需要在双引号内才能正常运行,因此请检查var是否在基本程序中正确分配给1。如果不是这样,并且你在myString上有正确的范围,你将需要发布你的实际代码而不是伪代码,因为否则很难在这里发现你的错误。