对象引用未设置为对象实例:“c#char in array”

时间:2014-02-15 16:32:43

标签: c# arrays char visual-web-developer

我得到的错误在标题中。它与数组和我所拥有的for-loop有关。我试图将文本框中的字母存储在一个数组中,然后存储在一个会话中,然后在for循环中搜索这些字母,并检查数组中的字母是否等于来自txtbox的另一个字母。 好吧......希望你们中的一些人知道什么是错的。 (那里有一些挪威字母,但不要担心它们) 以下是错误代码:

    Linje 30:     protected void btnSjekkOrd_Click(object sender, EventArgs e)
    Linje 31:     { 
    Linje 32:             for (int i=0; i < arrayOrd.Length; i++ )
    Linje 33:             {
    Linje 34:                 if (txtBokstavSjekk.Text.Length == arrayOrd[i])

以下是所有代码:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page 
{
    //Session
    char [] arrayOrd;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["arrayOrd"] != null)
        {
           arrayOrd = (char[])Session["arrayOrd"];
        }
    }
    protected void Page_Unload(object sender, EventArgs e) 
    {
        Session["arrayOrd"] = arrayOrd;

    }

    protected void btnStart_Click(object sender, EventArgs e)
    {
       char[] arrayOrd = txtOrd.Text.ToCharArray();//Putter txtOrd i array
    }
    protected void btnSjekkOrd_Click(object sender, EventArgs e)
    { 
            for (int i=0; i <= arrayOrd.Length; i++ )
            {
                if (txtBokstavSjekk.Text.Length == arrayOrd[i])
                {
                    labRiktigBokstav.Text += arrayOrd[i];
                }
                else {
                    labFeilBokstaver.Text += "<b>" + arrayOrd[i] + "<b/>";
                }
            }


    }
}

1 个答案:

答案 0 :(得分:0)

在btnStart_Click中,您声明了数组arrayOrd的另一个副本 事件处理程序的本地副本,在事件结束时不再可访问,然后销毁

删除声明类型char[],您的代码将引用全局变量

protected void btnStart_Click(object sender, EventArgs e)
{
   arrayOrd = txtOrd.Text.ToCharArray();//Putter txtOrd i array
}

但是,您的代码仍然很弱,如果用户在开始按钮之前按下按钮btnSjekkOrd,则arrayOrd仍然为空并且错误将再次出现

protected void btnSjekkOrd_Click(object sender, EventArgs e)
{ 
    if(arrayOrd == null) return; // or message to press the start button

    for (int i=0; i <= arrayOrd.Length; i++ )
    ....