2013-12-12 17 views
0

我一直在使用C++和c#中的new。在C++中,我使用int a[8]來聲明一個數組,如果數組是一個對象,我們設置的值爲item[0].SetID(5),它將設置第一項ID的值爲5.但我無法在c#中完成。如何在陣列中使用Getter setter

namespace Arrays 
{ 
    class items { 
     public int ID { set; get; } 
     public string name { set; get; } 
     public items(int ID) { 
      this.ID = ID; 
      name = "Faizan"; 
     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var i=new items[4]; 
      i[0].ID=6;// this line is kind of c++ code but how I do it in c# 
      Random r = new Random(); 
      for (int k = 0; k < 4; k++) { 
       i[k] = new items(r.Next()); 
      } 
      foreach(items it in i){ 
       Console.WriteLine("The item name {0} and the Id is {1}",it.name,it.ID); 
      } 

     } 
    } 
} 
+1

你的數組將充滿空元素。您需要在int [0] –

+1

中實例化對象與您的問題無關的建議:您可以考慮調用您的類「item」而不是「items」。這樣做會更好,因爲課堂似乎是模擬單個項目而不是項目集合。一個小問題,但它會讓你的代碼更加可讀性,任何人都不熟悉它。 – razlebe

回答

3

創建後將使用默認值填充數組。 MSDN

如果你不初始化在聲明時的陣列,該陣列 成員被自動初始化爲數組類型的默認初始 值。

對於參考類型(即類),默認值是空值。所以,你應該初始化數組項之前訪問它們:

var i =new items[4]; 
// i[0] here is null 

for (int k = 0; k < 4; k++) { 
    i[k] = new items(r.Next()); // now i[0] points to object in memory 
} 

i[0].ID = 6;// now you can set object's property 
0

我[0] .ID = 6; //這一行是怎麼樣的C++代碼,但我怎麼做它在C#中

您在該點的陣列是。你在循環之後初始化它。

所以

  • 第一初始化數組值
  • 存取之後/改變實例的屬性數組

    static void Main(string[] args) 
    { 
    
        Random r = new Random(); 
        for (int k = 0; k < 4; k++) { 
         i[k] = new items(r.Next()); 
        } 
        foreach(items it in i){ 
         Console.WriteLine("The item name {0} and the Id is {1}",it.name,it.ID); 
        } 
    
        var i= items[4]; 
        i.ID=6;// NOW YOU CAN ACCCESS IT 
    
        //OR SIMPLY 
        items[4].ID=6; 
    
    } 
    
1

你的產品內部的索引0爲空。你需要的時候,我們聲明一個對象的數組它會自動初始化爲NULL或「0」要做到這一點,而不是

i[0] = new items{ID = 6}; 
+1

你必須使用「新」: – Wasafa1

+0

Rolf。我的錯。固定。 – Alex

0

在C++中,我們可以獲取或設置的值剛剛之後(糾正我,如果我錯誤)。那C#怎麼樣? 我認爲是var i = new items [4];這一行也初始化數組,是嗎?