-2

我的代码如下所示。

我从查询字符串中得到消息。在那之后,我将得到它的消息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
        {
4

5 回答 5

6

messageIn 在 try-block 中声明,这是您的问题。

只需在外面声明它:

string messageIn = null;
try
{
    messageIn = Request.QueryString["msg"];
    // some code here
}

...

-blocktry创建了一个新的范围,因此在其中声明的变量在外部是不可见的。

于 2012-08-21T06:43:06.493 回答
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
}
于 2012-08-21T06:43:28.413 回答
3

string messageIn在块外声明 。

protected void Page_Load(object sender, EventArgs e)
{
    string messageIn=string.Empty;
    ....
}
于 2012-08-21T06:43:46.423 回答
3

您收到错误是因为您messageIn在 try 块中声明。试试这个:

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(' ');
   ...
}
于 2012-08-21T06:45:15.200 回答
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");
        }
于 2012-08-21T06:44:27.343 回答