控制器中的NullReferenceException c#

Dav*_*888 2 .net c# nullreferenceexception

NullReferenceException试着运行一个视图.我没有看到导致此问题的代码.有人可以解释这个问题吗?谢谢

这是Model类:

public class Catalogus: ICatalogus
{
    private readonly DbSet<Materiaal> materialen;
    private IEnumerable<Materiaal> materialenTest;
    private Firma firma;

    public Catalogus()
    {
        firma = new Firma("hh", "lol@gmail.com");
        materialenTest = new Materiaal[] { new Materiaal(5, 0, "1", "test", "test", "ts", firma, "wereldbol", "wereldbol", "lol", 0, true) };
    }

    public IEnumerable<Materiaal> VindAlleMaterialen()
    {
        return materialenTest.OrderBy(m => m.Naam);
    }

    public IEnumerable<Materiaal> ZoekOpTrefwoord(string trefwoord)
    {
        IEnumerable<Materiaal> gefilterdMaterialen = materialenTest.Where(mat => mat.GetType().GetProperty("naam").GetValue(this).Equals(trefwoord));

        return gefilterdMaterialen;
    }
} 
Run Code Online (Sandbox Code Playgroud)

具有NullRef异常的控制器:

这条线导致了这个问题.

IEnumerable materialen = catalogus.VindAlleMaterialen().OrderBy(m => m.Naam).ToList();

public class CatalogusController : Controller
{
    private ICatalogus catalogus;

    public CatalogusController() { }

    public CatalogusController(ICatalogus catalogus)
    {
        this.catalogus = catalogus;
    }

    public ActionResult Index()
    {
        IEnumerable<Materiaal> materialen = catalogus.VindAlleMaterialen().OrderBy(m => m.Naam).ToList();

        return View(materialen);
    }
}
Run Code Online (Sandbox Code Playgroud)

Igo*_*gor 7

您的默认构造public CatalogusController函数不会创建catalogus实例.然后执行catalogus.VindAlleMaterialen().OrderBy(m => m.Naam).ToList();它时会导致NullReferenceException,因为它catalogus为null.

如果调用重载的构造函数(可能不是这种情况),则应验证传入的参数.

public CatalogusController(ICatalogus catalogus)
{
    if(catalogus == null) throw new ArgumentNullException("catalogus");
    this.catalogus = catalogus;
}
Run Code Online (Sandbox Code Playgroud)