2015-09-10 27 views
-1

我有一個類baseClass以及baseClass的對象列表。我想實現的是我必須動態分配實例號給列表中的每個對象。因爲我在做的是使用構造函數來做到這一點。如何維護對象列表中的實例編號

以下是類定義:

public class baseClass 
{ 
    private int _InstanceNumber; 
    private int _MyIntVal; 
    private string _MyString; 
    public string MyString 
    { 
     get { return _MyString; } 
     set { _MyString = value; } 
    } 
    public int MyIntVal 
    { 
     get { return _MyIntVal; } 
     set { _MyIntVal = value; } 
    } 
    public int MyProperty 
    { 
     get { return _InstanceNumber; } 
    } 
    public baseClass(int instance) 
    { 
     _InstanceNumber = instance; 
    } 
} 

對象的列表的創建如下:

int instanceNumber = 0; 
List<baseClass> classList = new List<baseClass>(); 
classList.Add(new baseClass(instanceNumber++) { MyString = "sample1", MyIntVal = 10 }); 
classList.Add(new baseClass(instanceNumber++) { MyString = "sample2", MyIntVal = 11 }); 

我知道這是不是爲創建這個實際的方式。它實際上並沒有給出索引號。我如何計算實例編號?

請考慮以下情況,即創建另一個對象列表,然後難以維護實例編號。或者如果我在列表的外部創建另一個對象(這也是一個實例)。

int instanceNumber = 0; 
List<baseClass> anotherClassList = new List<baseClass>(); 
classList.Add(new baseClass(instanceNumber++) { MyString = "sample1", MyIntVal = 10 }); 
classList.Add(new baseClass(instanceNumber++) { MyString = "sample2", MyIntVal = 11 }); 

更新: 這是我這個臨時的解決方案。我需要正確的方法/方法來維持實例號

+3

「它不給實際的索引號「 - 你是什麼意思?順便說一下,您應該查看自動實現的屬性,這可以顯着減少需要編寫的代碼量 - 尤其是使用支持自動實現的只讀屬性的C#6。我還強烈建議您查看.NET命名約定。 –

+2

接下來,如果您創建一個新列表,那麼您希望這些實例編號從0重新開始?或者這是一個* global *實例號碼? –

+0

你的代碼適合我... – rene

回答

0

如果你想找到項的索引列表中,你應該問它從list,而不是item像:

var index = list.IndexOf(item); 

但似乎您希望item知道其在list中的位置。爲了做到這一點,你應該通過listitem,因此可以用它來找到自己的位置,這可:

public class Item 
{ 
    private List<Item> _containerList; 

    public Item(List<Item> containerList) 
    { 
     _containerList = containerList; 
    } 

    public int InstanceNumber 
    { 
     get { return _containerList.IndexOf(this); } 
    } 
} 

和你的代碼更改爲:

List<Item> classList = new List<Item>(); 
classList.Add(new Item(classList) { ... }); 
classList.Add(new Item(classList) { ... });