代码之家  ›  专栏  ›  技术社区  ›  rn605435

显示错误值

  •  0
  • rn605435  · 技术社区  · 6 年前

    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]);

    3 回复  |  直到 6 年前
        1
  •  4
  •   user3785553    6 年前

    它正在显示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
  •  4
  •   Yogi nikunj pansuriya    6 年前

    你已经用4初始化了你的数组表 Personnes(4) Tableau[10] ,所以你的答案是正确的 IndexOutOfRange 例外。您正在查找的索引超出指定的范围。

        3
  •  1
  •   nvoigt    6 年前

    我听说了Console.WriteLine(表[10]);应该显示null和下一行-1,但它没有,相反,我有一个错误indexoutfrange,为什么?

    因为不管是谁告诉你的都是错的。访问索引不存在的数组 抛出异常。