C#MVC类对象引用未设置为对象的实例

本文关键字:对象 实例 设置 对象引用 C#MVC | 更新日期: 2023-09-27 17:59:41

有人能帮我解决课堂上的问题吗?

我有一个地址类:

public class Address
{
    public string addressDescription { get; set; }
    public string addressNumber { get; set; }
    public string adddressLine1 { get; set; }
    public string adddressLine2 { get; set; }
    public string adddressLine3 { get; set; }
    public string addressPostCode { get; set; }
    public double addressLatitude { get; set; }
    public double addressLongitude { get; set; }
}

我有一个路线等级:

public class Route
{
    public Address from { get; set; }
    public Address to { get; set; }
}

在我的控制器中,我设置了一些伪信息,比如:

public ActionResult FareCalculator(string from , string to)
    {
        var myroute = new Route();
        myroute.from.addressDescription = from;
        myroute.from.addressLatitude = 51.481581;
        myroute.from.addressLongitude = -3.179090;
        myroute.to.addressDescription = to;
        myroute.to.addressLatitude = 51.507335;
        myroute.to.addressLongitude = -0.127683;
        return View(myroute);
    }

但当我运行该项目时,它落在了myroute.from.addressDescription=from上;一行表示对象引用未设置为对象的实例。

我看不出我做错了什么。有人能帮忙吗?

感谢

Trev

C#MVC类对象引用未设置为对象的实例

您需要创建一个新的Address实例,并将其分配给fromto:

public ActionResult FareCalculator(string from , string to)
{
    var myroute = new Route();
    myroute.from = new Address(); // new instance
    myroute.from.addressDescription = from;
    myroute.from.addressLatitude = 51.481581;
    myroute.from.addressLongitude = -3.179090;
    myroute.to = new Address(); // new instance
    myroute.to.addressDescription = to;
    myroute.to.addressLatitude = 51.507335;
    myroute.to.addressLongitude = -0.127683;
    return View(myroute);
}

我可以建议使用构造函数初始化from和to字段吗?否则,每次使用Route类时都必须新建对象。

public class Route
{
    public Address from { get; set; }
    public Address to { get; set; }
    public Route()
    {
        from = new Address();
        to = new Address();
    }
}

这样你就可以使用你提供的代码:

    var myroute = new Route();
    myroute.from.addressDescription = from;
    myroute.from.addressLatitude = 51.481581;
    myroute.from.addressLongitude = -3.179090;
    myroute.to.addressDescription = to;
    myroute.to.addressLatitude = 51.507335;
    myroute.to.addressLongitude = -0.127683;
    return View(myroute);

您已经创建了Route实例,但忘记创建Address的新实例(用于fromto):

var myroute = new Route
{
    from = new Address(),
    to = new Address()
};

myroute.frommyroute.to应该是Address类的一个实例。

 public ActionResult FareCalculator(string from , string to)
 {
        var myroute = new Route();
        myroute.from = new Address();
        myroute.from.addressDescription = from;
        myroute.from.addressLatitude = 51.481581;
        myroute.from.addressLongitude = -3.179090;
        myroute.to = new Address();
        myroute.to.addressDescription = to;
        myroute.to.addressLatitude = 51.507335;
        myroute.to.addressLongitude = -0.127683;
        return View(myroute);
    }