2015-11-09 114 views
0

在Java中,你可以這樣做:如何獲取C#中的通用列表,堆棧和映射的成員?

爲了得到一個泛型列表中的一員:

public T getMember(int index){ 
    return list.get(index); 
} 

要獲得一般堆棧中的一員:

public T getMemberFromStack(int index){ 
    return stack.get(index); 
} 

而獲得通用地圖的成員:

public T getMemberFromMap(K key){ 
    return map.get(key); 
} 

我一直在尋找

https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/3278tedw(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx

但我找不到在C#中類似的方法。

這些方法應該返回對象而不從list/stack/map中移除它們。

+6

堆棧使用push/pop,列表只是訪問器,又名'myList [index]',映射(字典)使用鍵'myMap [key]'。 –

+0

有沒有辦法從堆棧中看到元素,而不刪除它? –

+1

您可以使用[Peek](https://msdn.microsoft.com/en-us/library/1w32446f%28v=vs.110%29.aspx)方法,但只會顯示頂部的項目堆棧。 (與Queue相同,它會在不刪除它的情況下顯示隊列初始位置的項目) – keyboardP

回答

4

與Java不同,C#允許您重載運算符。這就是圖書館的設計師做的事:而不是提供get(int)get(K)方法,他們提供給[]操作過載:

public T getMember(int index){ 
    return list[index]; 
} 

public T getMemberFromMap(K key){ 
    return map[key]; 
} 

之間的一個重要區別Java的Map<K,V>和C#的Dictionary<K,V>是Java的get將返回null了丟失的關鍵,而C#的operator [] would throw an exception

6

List<T>

public T GetMember(int index) 
{ 
    return list[index]; 
} 

對於Stack<T>爲什麼你會不會得到一個特定的元素在棧上):

public T GetMemberFromStack(int index) 
{ 
    return stack.ElementAt(index); 
} 

對於Dictionary<T, K>

public T GetMemberFromMap(K key) 
{ 
    return map[key]; 
} 
+3

只是澄清一下,'ElementAt'方法來自System。Linq',而不是默認的'Stack/Queue'類的一部分,因此您可能需要導入該名稱空間(儘管Stack/Queue可能不是通過索引器進行隨機訪問的最佳數據結構)。 – keyboardP

+0

@keyboardP同意。 '堆棧'本身並不提供這種方法(這是有意的),因爲如果它會的話,堆棧的點將是無用的。如果你要通過索引檢索元素,那麼你會使用某種列表。 –

+0

我知道,但它需要表現得像一個堆棧,並在某些時候打印(.toString)所有元素。 –