这在C#中可能是非常基础的,但我经常四处寻找解决方案。
在我的MVC控制器的操作方法中,我有一个传入的routeid(programid
),我需要用它来创建另一个字符串变量(accounttype
)。我有一个if / else来评估accounttype
的值。稍后在同一个动作方法的代码中,我没有if / else接受变量accounttype
并创建一个JSON字符串以传递给支付网关。但我收到错误"The name 'accounttype' does not exist in current context.'
我是否需要将其声明为公开或其他什么?
以下是两个if / else语句:
if (programid == 0)
{
string accounttype = "Membership";
}
else
{
string accounttype = "Program";
}
稍后在同一个控制器操作中,我需要使用accounttype
变量来计算另一个字符串变量(URL)
if (results.Count() > 0)
{
string URL = accounttype + "some text"
}
else
{
string URL = accounttype + "some other text"
}
答案 0 :(得分:2)
Scope是您的问题:)
因为我猜你是新手,我会尝试用简单的词来定义它:变量的范围是变量所在的位置。并非所有变量都可以在程序中随处调用,我们称之为 global 的人。
在您的情况下,您在if .. else
语句中声明这些变量,并且由于C#规则,它们会在if块结束时立即死亡。这就是编译器告诉你的:你不能调用那些不存在的东西。
要解决您的问题,您只需声明
即可string accounttype;
在if.. else
之前,你会没事的。
如果您想了解有关范围的更多信息,this是一个很好的起点!
答案 1 :(得分:1)
accounttype的范围仅限于if语句。做
string accounttype;
if (programid == 0)
{
accounttype = "Membership";
}
else
{
accounttype = "Program";
}
答案 2 :(得分:1)
问题是您在accounttype
和if
块的范围内定义了else
变量,因此不会在这些块之外定义它。
尝试在if
/ else
块之外声明变量:
string accounttype;
string URL;
if (programid == 0)
{
accounttype = "Membership";
}
else
{
accounttype = "Program";
}
if (results.Count() > 0)
{
URL = accounttype + "some text"
}
else
{
URL = accounttype + "some other text"
}
或者,如果您的代码真的很简单,只需使用conditional operator:
即可string accounttype = programid == 0 ? "Membership" : "Program";
string URL = accounttype + (results.Any() ? "some text" : "some other text");
答案 3 :(得分:1)
这是一个范围问题。大括号{}内的任何内容都被定义为块。块中定义的任何变量仅在该块中可用,并在退出块时进行垃圾收集。
不要在if语句的块中定义accountType:
string accounttype;
if (programid == 0)
{
accounttype = "Membership";
}
else
{
accounttype = "Program";
}
答案 4 :(得分:0)
您的范围不正确,请尝试以下方法:
string accounttype;
if (programid == 0)
{
accounttype = "Membership";
}
else
{
accounttype = "Program";
}
答案 5 :(得分:0)
帐户类型变量的范围位于if的{
}
中。你需要在if之后声明变量,以便能够在之后使用它,甚至更好:
string accounttype = programid == 0 ? "Membership" : "Program";
答案 6 :(得分:0)
因为您在闭包中定义了变量,所以一旦退出这些闭包,它们就会超出范围。 你需要:
string URL;
if(test)
{
URL = "1";
} else {
URL = "2";
}