[英]How to declare an array of objects in C#
我有一個非常開始的 C# 問題。 假設我有一個名為GameObject
的類,我想創建一個GameObject
實體數組。 我可以考慮編寫如下代碼:
GameObject[] houses = new GameObject[200];
編譯器抱怨(假設是因為語法無效)。 由於這是 XNA 開發,我在LoadContent()
方法中加載我的紋理,如下所示:
houses[0].Model = Content.Load<Model>("Models\\Building_01 Windowed");
其中houses[0]
應該是一個GameObject
並且可以像這樣加載,但是編譯器會拋出這個錯誤:
“使用“new”關鍵字創建對象實例”
“在調用方法之前檢查以確定對象是否為空”
我的初始化肯定有問題。
這里的問題是,您已經初始化了數組 ,但尚未初始化其元素 ; 它們都是空的。 因此,如果您嘗試引用houses[0]
,它將為null
。
這是您可以自己編寫的一個很棒的小助手方法:
T[] InitializeArray<T>(int length) where T : new()
{
T[] array = new T[length];
for (int i = 0; i < length; ++i)
{
array[i] = new T();
}
return array;
}
然后,您可以將houses
數組初始化為:
GameObject[] houses = InitializeArray<GameObject>(200);
您正在創建一個空引用數組。 您應該執行以下操作:
for (int i = 0; i < houses.Count; i++)
{
houses[i] = new GameObject();
}
我猜GameObject
是引用類型。 引用類型的默認值為null =>您有一個null數組。
您需要分別初始化數組的每個成員。
houses[0] = new GameObject(..);
只有這樣,您才可以訪問對象而不會發生編譯錯誤。
因此,您可以顯式初始化數組:
for (int i = 0; i < houses.Length; i++)
{
houses[i] = new GameObject();
}
或者您可以將GameObject
更改為值類型。
您需要初始化數組的對象元素。
GameObject[] houses = new GameObject[200];
for (int i=0;`i<house` i<houses.length; i++)
{ houses[i] = new GameObject();}
當然,在引用元素之前,可以在其他任何地方使用不同的構造函數有選擇地初始化元素。
您擁有的一切看起來都很好。
我唯一能想到的(沒有看到應該提供的錯誤消息)是GameObject需要默認的(無參數)構造函數。
發生這種情況的原因是,初始化數組不會初始化該數組中的每個元素。 您需要先設置houses[0] = new GameObject()
,然后它才能工作。
對於仍在尋找的人
Object[] obj = {
new { key = "key", value = "value"},
new { key = "key", value = "value"},
new { key = "key", value = "value"},
new { key = "key", value = "value"},
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.