2012-07-27 166 views
-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; } 
} 

回答

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

,或者你可以在請求構造初始化RequestDetail爲好。

+0

u能解釋這種 – 2012-07-27 12:40:55

+0

ü[R編碼部分 – 2012-07-27 12:41:10

+0

您可以用這種方式assing值的屬性了。這裏有一些「解釋」:http://msdn.microsoft.com/en-us/library/bb384062.aspx – laszlokiss88 2012-07-27 12:46:59

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

如果Request構造函數不初始化this.RequestDetail(或初始化爲null),你會得到一個NullReferenceException當您嘗試訪問Request.RequestDetail性能。

所以,在你的構造函數中初始化它。

0

在初始化之前,您正在嘗試從屬性RequestDetail訪問ObjectId,因此後者的值爲Null

我不知道你正在嘗試做的事情 - 也許這樣的事情?:

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

Console.WriteLine(rd.ObjectId); 
2

的問題是,你的Request不會在構造函數初始化它RequestDetail成員(事實上,它有根本沒有構造函數)。

如果你希望能夠構建你的Request,你應該添加一個構造函數,這樣後立即訪問RequestDetail

public class Request { 
    public RequestDetail RequestDetail { get; set; } 
    public Request() { 
     RequestDetail = new RequestDetail(); 
    } 
} 
0

你不是調用屬性之前初始化RequestDetail。你可以這樣做:

public class Request { 
    public Request(){ 
     this.RequestDetail = new RequestDetail(); 
    } 
    public RequestDetail RequestDetail { get; set; } 
} 
public class RequestDetail{ 
    public string ObjectId { get; set; } 
}