我的代码如下所示。
我从查询字符串中获取消息。在那之后,我将把它传达给array(msg_arr)
消息。但所有这些内容都在Page_load
内。
但为什么会出现这个错误?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
try
{
string messageIn = Request.QueryString["msg"];
// some code here
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
string[] msg_arr = messageIn.Split(' '); // error shown here
int size = msg_arr.Length;
if(!CheckUserExistAndReporter("messageIn"))
{
// Response.Redirect("~/test.aspx");
}
else
{
答案 0 :(得分:6)
你在try-block中声明了messageIn
,这就是你的问题。
只需在外面宣布:
string messageIn = null;
try
{
messageIn = Request.QueryString["msg"];
// some code here
}
...
try
- 块创建一个新范围,因此在其中声明的变量在外部不可见。
答案 1 :(得分:4)
当你这样做时
try
{
string messageIn = Request.QueryString["msg"];
// some code here
}
字符串的范围仅限于try块,并且不再存在于该块之外。
你必须将字符串的范围增加到整个if块以使其工作
if (!IsPostBack)
{
string messageIn = string.Empty;
......
try
{
messageIn = Request.QueryString["msg"];
// some code here
}
答案 2 :(得分:3)
在区块外宣布string messageIn
。
protected void Page_Load(object sender, EventArgs e)
{
string messageIn=string.Empty;
....
}
答案 3 :(得分:3)
您收到错误是因为您在try块中声明了messageIn
。试试这个:
string messageIn;
try
{
messageIn = Request.QueryString["msg"];
// some code here
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
if (!string.IsNullOrEmpty(messageIn)
{
string[] msg_arr = messageIn.Split(' ');
...
}
答案 4 :(得分:2)
您在messageIn
块中声明try{}
变量,因此其范围仅在try{}
块内。
你应该做这样的事情
protected void Page_Load(object sender, EventArgs e)
{
string messageIn=string.Empty;
if (!IsPostBack)
{
try
{
messageIn = Request.QueryString["msg"];
// some code here
}
catch(Exception ex)
{
Response.Write(ex.Message);
}
string[] msg_arr = messageIn.Split(' '); // error shown here
int size = msg_arr.Length;
if(!CheckUserExistAndReporter("messageIn"))
{
// Response.Redirect("~/test.aspx");
}