2013-04-26 143 views
1

我甚至不確定這個問題的標題是否正確,但我不確定如何描述問題。基本上我有以下兩個類:C#類變量的定義類型

class A 
{ 
    public B b { get; set; } 
} 

class B 
{ 
    public string name { get; set;} 
} 

創建我A類的對象後,我試圖定義類B變量名像這樣:

A classA = new A(); 
A.B.name = "TEST"; 

不過,我不斷收到跟隨錯誤:

Object reference not set to an instance of an object.

很明顯,我正在做一些完全錯誤的事情。任何幫助,將不勝感激。

謝謝!

+2

我很驚訝,A.B.name編譯。我會說它應該是A.b.name。 – 2013-04-26 15:26:49

回答

1

你需要調用它是這樣的:

A classA = new A(); 
classA.b = new B(); 
classA.b.name = "TEST"; 

的問題是,你需要實例化b財產上classA實例創建。

10

您還沒有創建B的實例,因此它是null(即在您的實例A中)。你可以例如在構造函數中實例化:

class A 
{ 
    public B b { get; set; } 

    public A() 
    { 
     b = new B(); 
    } 
} 
+2

這就是答案 – PlantationGator 2013-04-26 15:27:33

+2

使用構造函數可能是最好的答案,但其他人在技術上是正確的。 – Eric 2013-04-26 15:28:27

+0

不幸的是,A類和B類都是通過網絡服務。我無法改變它們。所以,我不能使用這個解決方案。 – Anonymous 2013-04-26 15:38:48

0

B爲空。您需要先實例化B,然後才能引用它。

A classA = new A(); 
classA.B = new B(); 
classA.B.name = "TEST"; 
0

初始化B類

A classA = new A(); 
classA.b = new B(); 
classA.b.name = "TEST"; 
+3

這在語法上是錯誤的。第一個變量名爲classA,所以說A.B = new B()是錯誤的;它應該是classA.B = new B();這甚至是錯誤的,因爲屬性是小寫的b,所以它應該是classA.b = new B(); – Jim 2013-04-26 15:29:00

+2

@Jim我會說這個問題首先是錯誤的,混淆了B和B. – 2013-04-26 15:29:38

+0

這個問題的寫法可能很容易混淆類名和變量名,但這並不是錯的;這是完全有效的。 – Jim 2013-04-26 15:31:29

0

你需要你的B類的一個實例

A classAInstance = new A(); 
classAInstance.b = new B(); 
classAInstance.b.name = "TEST";