2015-05-20 152 views
2
class Program{ 

    static void Main(string[] args){ 

     object[] array = new object[1]; 

     CreateItem item = new CreateItem(); 
     item.name = "Necklace"; 
     item.value = 5; 
     array[0] = item; 

     Console.WriteLine(array[0].name); //This part of the code doesn't work. 
              //It can't find the property name. 
     Console.ReadLine(); 
    } 
} 

public class CreateItem { 
    public string name; 
    public int value; 
} 

你好!首先,我想說我對對象不是很熟悉,所以請在代碼中看到任何錯誤(儘管可以自由糾正它們,但它是學習的好方法)。我一直在努力製作一個使用C#的小遊戲,但是我遇到了一個問題:當我將它們放入數組中時,我無法訪問我的對象屬性。有誰知道我應該使用哪些代碼來訪問數組中的對象屬性?陣列中的訪問對象屬性

感謝您的閱讀,並且再次藉口我犯的任何愚蠢的錯誤,我對於使用對象的工作還很陌生。

+0

爲什麼使用'object'而不是強類型類? – Tim

+0

使用'CreateItem'來代替'array'的對象 – Sybren

回答

6

當你有一個你感興趣的強類型時(你已經知道這個類型),你不應該使用對象數組。

CreateItem[] array = new CreateItem[1]; 

CreateItem item = new CreateItem(); 
item.name = "Necklace"; 
item.value = 5; 
array[0] = item; 

Console.WriteLine(array[0].name); 

現在按預期輸出項鍊。

+0

感謝您的好評!也讓我意識到還有多少東西要學習物體。 – Frans

+0

不客氣! –

2

您應該看看使用泛型和列表,這是一個非常普遍和有價值的概念,正如泛型解決了拳擊和拆箱的概念一樣。

class Program{ 

    static void Main(string[] args){ 

    List<CreateItem> list = new List<CreateItem>(); 

    CreateItem item = new CreateItem(); 
    item.name = "Necklace"; 
    item.value = 5; 
    list.Add(item); 

    Console.WriteLine(list[0].name); //This part of the code doesn't work. 
             //It can't find the property name. 
    Console.ReadLine(); 
    } 


} 
1

你可以把對象給你的類型,即: Console.WriteLine(((CreateItem)array[0]).name);

或(更有效)

定義arrayCreateItem[] array = new CreateItem[1];

0

object[] array = new object[1]; 

CREA檢測一組類型爲Object的元素,它是.NET中所有其他類的基類。

這樣做:

array[n] = item; 

的隱式轉換到基類型發生,並且通過array[n]可以訪問CreateItem對象的Object類型部分的唯一成員(如ToString()GetType() - 他們的覆蓋將是所謂的)。

如果要訪問整個CreateItem對象,你要投的參考基本類型回到原來的類型,使用類型轉換操作符,例如:

var name = ((CreateItem)array[0]).name; 

這明確鑄件容易出錯,有運行時間的開銷,這是一個糟糕的設計的標誌。當您事先知道該集合的類型時,請將其類型的集合聲明爲其他答案提示:

// you can use array if you know number of items in advance and that number of elements will not change 
CreateItem[] array = new CreateItem[N]; 

// use list if number of elements might change 
List<CreateItem> list = new List<CreateItem>();