我在ASP.NET razor页面(cshtml)上运行以下代码,并且遇到了可怕的“对象引用没有设置为对象的实例”问题。有人可以帮我解决这个问题吗?我正在使用的代码如下,导致问题的行是menu[1][0] = "About";
string[][] menu = new string[5][];
menu[0] = new string[2];
// First menu item
menu[0][0] = "Home";
// First menu URL
menu[0][1] = "#";
// Second menu item
menu[1][0] = "About";
// Second menu URL
menu[1][1] = "#";
// Third menu item
menu[2][0] = "Contact";
// Third menu URL
menu[2][1] = "#";
// Fourth menu item
menu[3][0] = "More Info";
// Fourth menu URL
menu[3][1] = "#";
// Fifth menu item
menu[4][0] = "Test";
// Fifth menu URL
menu[4][1] = "#";
提前致谢
答案 0 :(得分:6)
您只是初始化了menu
中的第一个元素。尝试for循环:
for (int i = 0; i < menu.Length; ++i)
{
menu[i] = new string[2];
}
或者你可以像这样写:
string[][] menu =
{
new string[] {"Home", "#"},
new string[] {"About", "#"},
new string[] {"Contact", "#"},
new string[] {"More Info", "#"},
new string[] {"Test", "#"}
};
或者改为使用矩形阵列:
string[,] menu =
{
{"Home", "#"},
{"About", "#"},
{"Contact", "#"},
{"More Info", "#"},
{"Test", "#"}
};
由于你的第二个元素是常数,也许你根本不需要存储它 - 在这种情况下你可以使用string[]
。
string[] menu = { "Home", "About", "Contact", "More Info", "Test" };
答案 1 :(得分:3)
你有:
menu[0] = new string[2];
但是在使用它们之前,您需要初始化menu
的所有其他第一级元素。
menu[1] = new string[2];
menu[2] = new string[2];
menu[3] = new string[2];
menu[4] = new string[2];
但值得注意的是,如果第二级中的元素数量一致,则不需要使用锯齿状数组。我不知道这是否只是您的样本数据的巧合,但您可以这样做:
string menu[,] = new string[5,2];
这将允许您执行以下操作:
menu[0,0] = "...";
menu[0,1] = "...";
...
menu[4,1] = "...";
您不必将第一级的每个元素初始化为新数组。
答案 2 :(得分:1)
您正确初始化第一个数组:
menu[0] = new string[2];
但不是其余的,例如你还需要:
menu[1] = new string[2];
..等等。
希望有所帮助!
答案 3 :(得分:1)
更容易完全避免这个问题,并像这样创建你的数组:
string[,] menu = new string[,] {
{"Home", "#"},
// ...
{"Test", "#"}
};
答案 4 :(得分:1)
我建议使用Mark Byers's answer,或者更改代码以使用多维数组而不是锯齿状数组(数组数组):
string[,] menu = new string[5, 2];
// First menu item
menu[0, 0] = "Home";
// First menu URL
menu[0, 1] = "#";
// Second menu item
menu[1, 0] = "About";
// Second menu URL
menu[1, 1] = "#";
// And so on...
多维数组并不总是最好的解决方案,但我发现当你想要确定你正在处理一个矩形维网格时,它们会让生活更轻松(所以你不必对每个子数组执行检查)例如它是否为空,它的长度是多少等等。)
那说,我还建议你考虑将你的菜单设置从像string[]
数组这样的低层结构中抽象出来(例如,考虑写一个Menu
类作为MenuItem
对象的集合,为您处理此功能。)
答案 5 :(得分:0)
您需要初始化每个子数组
menu[0] = new string[2];
menu[1] = new string[2];
//etc..
否则只有menu [0]有一个要分配的二维数组。