-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) 場合、プロパティNullReferenceExceptionにアクセスしようとすると が返されますRequest.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 に答える