我的ASP.NET MVC3项目中有一些C#代码,它抛出一个异常声明:
Cannot perform runtime binding on a null reference
Run Code Online (Sandbox Code Playgroud)
抛出异常的代码行是:
ViewBag.Foo[i].Name = allSpark[i].Users.Name;
Run Code Online (Sandbox Code Playgroud)
这是代码块:
ViewBag.Foo = new myAllSparkModelType[allSpark.Length];
for (int i = 0; i < allSpark.Length; i++)
{
ViewBag.Foo[i].Name = allSpark[i].Users.Name;
...
}
Run Code Online (Sandbox Code Playgroud)
当我设置断点并检查时allSpark[i].Users.Name,它肯定有一个值(例如"Fred").
如果我注释掉这行代码,那么下一行(类似代码)会抛出相同的异常.
所以问题是要么allSpark[i].Users.Name是一个空引用(我已经确认不是),或者我不能ViewBag像我一样使用.如果是后者,我很困惑,因为我认为ViewBag可以这样使用.
Jon*_*eet 10
看看这段代码:
ViewBag.Foo = new myDataModelType[allSpark.Length];
for (int i = 0; i < allSpark.Length; i++)
{
ViewBag.Foo[i].Name = ...
...
}
Run Code Online (Sandbox Code Playgroud)
ViewBag.Foo被初始化,但是每个元件的ViewBag.Foo将是null,假定myDataModelType是一个类.创建数组时,每个元素都初始化为元素类型的默认值 - 对于引用类型,该默认值为null.
您需要为每个元素创建一个新对象:
for (int i = 0; i < allSpark.Length; i++)
{
ViewBag.Foo[i] = new myDataModelType();
ViewBag.Foo[i].Name = ...
...
}
Run Code Online (Sandbox Code Playgroud)