-2

我得到对象引用未设置为对象的实例。以下代码例外。我可以通过创建 RequestDetail 的实例然后传递 ObjectId 来防止这种情况。

但是这段代码有什么问题。

class Program
{
    static void Main(string[] args)
    {
        Request header = new Request();
        header.RequestDetail.ObjectId = "12343";

        RequestDetail rd = new RequestDetail();
        rd = header.RequestDetail;

        Console.WriteLine(rd.ObjectId);
    }
}

public class Request
{
    public RequestDetail RequestDetail { get; set; }
}
public class RequestDetail
{
    public string ObjectId { get; set; }
}
4

5 回答 5

2
Request header = new Request { RequestDetail = new RequestDetail() }

或者您也可以在 Request 构造函数中初始化 RequestDetail 。

于 2012-07-27T12:27:44.537 回答
2
Request header = new Request();
header.RequestDetail.ObjectId = "12343";

如果 的构造函数Request未初始化this.RequestDetail(或将其初始化为),则当您尝试访问属性时null会得到 a 。NullReferenceExceptionRequest.RequestDetail

所以,在你的构造函数中初始化它。

于 2012-07-27T12:28:12.943 回答
2

问题是你Request没有RequestDetail在构造函数中初始化它的成员(事实上,它根本没有构造函数)。

如果您希望能够RequestDetail在构造完之后立即访问Request,您应该添加一个构造函数,如下所示:

public class Request {
    public RequestDetail RequestDetail { get; set; }
    public Request() {
        RequestDetail = new RequestDetail();
    }
}
于 2012-07-27T12:29:36.317 回答
0

您试图在初始化之前ObjectId从属性访问RequestDetail,因此后者的值为Null.

我不确定您要做什么-也许是这样?:

Request header = new Request();
RequestDetail rd = new RequestDetail();    
rd.ObjectId = "12343";
header.RequestDetail = rd;

Console.WriteLine(rd.ObjectId);
于 2012-07-27T12:28:50.213 回答
0

您没有在调用属性之前初始化 RequestDetail 。您可以执行以下操作:

public class Request {
    public Request(){
        this.RequestDetail = new RequestDetail();
    }
    public RequestDetail RequestDetail { get; set; }
}
public class RequestDetail{
    public string ObjectId { get; set; }
}
于 2012-07-27T12:29:37.873 回答