-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ブロック内で宣言しました。それがあなたの問題です。

外部で宣言するだけです:

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

...

try-block は新しいスコープを作成するため、その内部で宣言された変数は外部には表示されません。

于 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

messageIntry ブロック内で宣言したため、エラーが発生しました。これを試して:

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 に答える
3

string messageInブロックの外で宣言 します。

protected void Page_Load(object sender, EventArgs e)
{
    string messageIn=string.Empty;
    ....
}
于 2012-08-21T06:43:46.423 に答える
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 に答える