关于在嵌套if中使用变量

时间:2010-09-27 07:18:15

标签: c#

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应该得到值..不是吗?

7 个答案:

答案 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上有正确的范围,你将需要发布你的实际代码而不是伪代码,因为否则很难在这里发现你的错误。