显示错误的值

时间:2018-09-20 10:04:06

标签: c# class

我正在学习C#,我有以下代码:

namespace foo
{
    public class Personnes
    {
        string[] m_Noms;
        int m_NbElt;
        int m_Max;

        public Personnes(int Max)
        {
            m_Max = Max;
            m_NbElt = 0;
            m_Noms = new string[Max];
        }

        public int this[string Nom]
        {
            get { return Array.IndexOf(m_Noms, Nom); }
        }

        public string this[int i]
        {
            get { return m_Noms[i]; }
            set { m_Noms[i] = value;m_NbElt++; }
        }
    }
    class Prog
    {
        static void Main(string[] args)
        {
            Personnes Tableau = new Personnes(4);
            Tableau[0] = "Anna";
            Tableau[1] = "Ingrid";
            Tableau[2] = "Maria";
            Tableau[3] = "Ulrika";
            Console.WriteLine(Tableau[1]); 
            Console.WriteLine(Tableau["Maria"]);
            Console.WriteLine(Tableau[10]); 
            Console.WriteLine(Tableau["Toto"]); 


        }
    }
}

有人告诉我Console.WriteLine(Tableau[10]);应该显示null并在下一行显示-1,但是没有显示,而是显示错误IndexOutOfRange,为什么?

3 个答案:

答案 0 :(得分:4)

看到您仅用4个Personnes(4)初始化了数组Tableau。而且您正在尝试获取Tableau[10]的内容,因此您正确地获取了IndexOutOfRange异常。您正在寻找的索引超出了指定范围。

答案 1 :(得分:4)

它正在显示IndexOutOfRangeException,因为您已将Tableau设置为仅具有4个字符串,并且超出索引范围[0到3]的任何数组检索都将导致这种情况。

public string this[int i]
    {
        get { return m_Noms[i]; } <--  displays error if outside the range
        set { m_Noms[i] = value;m_NbElt++; }
    }

如果必须显示null,则需要在索引器逻辑中添加条件以检查索引值,如果它超出范围,则返回null

答案 2 :(得分:1)

  

有人告诉我Console.WriteLine(Tableau [10]);应该显示null并显示下一行-1,但没有显示,而是显示错误IndexOutOfRange,为什么?

因为谁告诉你那是错的。使用索引不存在的数组访问应该应该引发异常。