2013-02-13 71 views
0

我有擁有一批從十類對象的兩個克隆變量返回相同的索引列表

我通過clone功能添加一個對象列表,它得到了自己的指數,但如果我添加一個使用克隆的更多對象,對象接收與第一個克隆相同的索引。

這裏一些代碼:

public void AddCopyObj(List<x> MyList, int Idx) 
{ 
    x AddCloneObj=MyList[Idx].Clone(); 
    MyList.Insert(Idx+1,AddCloneObj) 
} 

public List<int> GetAllIndexs(List<x> MyList) 
{ 
    List<int> IndexList = new List<int>(); 
    foreach(x myXvar in MyList) 
    { 
    IndexList.add(MyList.IndexOf(myXvar)); 
    } 
    return IndexList ; 
} 

例如:如果我有10個對象至它們中的一個予製成兩次克隆,我將有12個目的和兩個克隆的指數是相同的(它們不要坐在同一個索引上,IndexOf函數返回相同的值)

我該怎麼辦?

編輯:

public x Clone() 
    { 
     x clone = new x(Int32.Parse(this.Name.Split(new char[1] { ' ' })[1]) + 1); 
     clone.Copy(this); 
     return clone; 
    } 
+1

請顯示'x.Clone()'的實現。 – 2013-02-13 13:03:37

+0

是的,你是否也實現了IEquatable for X? – 2013-02-13 13:04:39

+0

@hodaya代碼示例似乎有點奇怪,這段代碼的最終目標是什麼?我覺得可能有更簡單的方法來達到你的要求。 – 2013-02-13 13:12:51

回答

0

這個問題是我沒有做兩次克隆,

我把同一個對象,並把它兩次在列表中,

我做了兩次後,克隆問題得到解決。

(對不起,這不是一個問題,你不能說。)

2

從MSDN(強調我自己的)引用:

搜索指定的對象,並返回的 的第一次出現內的基於零的索引列表中 從指定索引延伸到最後一個元素的元素範圍。

它們都基本匹配第一次出現。這歸結爲您在List<>有物品的平等,它使用默認的相等比較:

這種方法使用默認的相等比較 EqualityComparer.Default爲T,在列表中值的類型決定的平等。

http://msdn.microsoft.com/en-us/library/e4w08k17.aspx

你可以使用,需要一個起始索引從搜索排除之前指數倍率:

http://msdn.microsoft.com/en-us/library/s8t42k5w.aspx

或者,如果你想基於哈希持有獨特的項目和平等,改爲使用HashSet<T>

我想過提供一個代碼示例,但是當我查看您提供的代碼時,它的意義越來越小。您當前的示例將循環索引順序中的項目,並將該索引添加到另一個列表中,僅對於重複的項目它將成爲相同的索引。退一步,你想達到什麼目的?我明白這裏有更好的選擇。

+0

假設我不能做你帶來的兩個選項之一(原因現在沒有改變)沒有其他方式來獲得真正的索引? – 2013-02-13 13:14:03

+1

@HodayaShalom你可以使用'for'循環代替'foreach'來獲得迭代項目的索引。我很努力地看到這段代碼試圖實現什麼。或者,如果您記錄您的列表有多遠,「IndexOf」覆蓋選項將適用於您。 – 2013-02-13 13:14:49

+0

解釋爲什麼我不能使用它有點複雜,但我會嘗試。基本上我通過轉換器(根據我的列表)在轉換器中將行號轉換爲wpf DataGrid我擁有整個列表,並且只包含應具有行號的項目。因此我無法使用您提出的建議,因爲我沒有索引開始發送。 – 2013-02-13 13:25:19