【问题标题】:How to get member of a generic list, stack and map in C#?如何在 C# 中获取通用列表、堆栈和映射的成员?
【发布时间】:2015-11-09 19:17:23
【问题描述】:

在 Java 中,您可以这样做:

获取通用列表的成员:

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# 中找不到类似的方法。

这些方法应该返回对象而不将它们从列表/堆栈/映射中删除。

【问题讨论】:

  • 堆栈使用 push/pop,列表只是访问器,也就是 myList[index],地图(字典)使用键 myMap[key]
  • 有没有办法从堆栈中看到一个元素,而不删除它?
  • 您可以使用Peek 方法,但这只会显示堆栈顶部的项目。 (与队列相同,它将在队列的开头显示项目而不删除它)
  • @WilhelmSorban 当然-使用Stack.Peek
  • 这在所有不同类型集合的文档中都有介绍。例如,List 可以被索引,因此 myList[5] 获取索引 5 处的元素。对于 map--myDictionary[theKey] 也是如此。这里有什么问题?

标签: c# generics


【解决方案1】:

对于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];
}

【讨论】:

  • 只是澄清一下,ElementAt 方法来自 System.Linq,而不是默认 Stack/Queue 类的一部分,因此您可能需要导入该命名空间(尽管 Stack/Queue 可能不是通过索引器进行随机访问的最佳数据结构)。
  • @keyboardP 同意。 Stack 本身不提供这种方法(这是有意的),因为如果提供,堆栈的点将无用。如果您要按索引检索元素,那么您将使用某种列表。
  • 我知道,但它需要表现得像一个堆栈,并且在某些时候,打印出 (.toString) 所有元素。
  • @WilhelmSorban 如果你只是打印出所有元素,你可以在集合上使用一个简单的 foreach 循环,因为所有这些集合都实现了IEnumerable<T>
【解决方案2】:

与 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2021-08-30
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多