我正在学习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,为什么?
答案 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,为什么?
因为谁告诉你那是错的。使用索引不存在的数组访问应该应该引发异常。