【问题标题】:HashMap in C# 'GetEnumerator' [duplicate]C#'GetEnumerator'中的HashMap [重复]
【发布时间】:2017-10-06 22:31:24
【问题描述】:

试图创建一个自定义的 HashMap 类,但我被 GetEnumerator 卡住了。

当我将鼠标悬停在“test.entrySet()”上时,它会出现

'foreach 语句不能对'Project.Map'类型的变量进行操作,不包含'GetEnumerator'的公共定义'

我的 foreach 循环看起来像这样

foreach(Map<string, object> e in test.entrySet()) {

}

我的 HashMap 类是这样的

public class HashMap<K, V> {
    private List<object> k = new List<object>();
    private List<object> v = new List<object>();

    public void put(object k, object v) {
        this.k.Add(k);
        this.v.Add(v);
    }

    public object get(object k) {
        var i = 0;
        foreach (var key in this.k) {
            if (k.Equals(key)) {
                return this.v.ElementAt(i);
            }
            i++;
        }
        return null;
    }

    public bool exist(object k) {
        return this.k.Contains(k);
    }

    public void clear() {
        this.k.Clear();
        this.v.Clear();
    }

    public Map entrySet() {
        return null;
    }
}

我的地图类看起来像。我觉得这门课没啥用……

public class Map<K,V> {

    private List<object> k = new List<object>();
    private List<object> v = new List<object>();

    public Map(List<object> k, List<object> v) {
        this.k = k;
        this.v = v;
    }

    public object getKey() {
        return null;
    }

    public object getValue() {
        return null;
    }
}

如果有人可以帮助我修复此代码/提供一些提示,我将非常高兴。

应该是这样的

HashMap<string, object test = new HashMap<string, object>();

foreach(Map<string, object> e in test.entrySet()) {
    string key = e.getKey();
    string value = e.getValue();
} 

【问题讨论】:

  • 您为什么要创建自定义 HashMap?你能把test 变成Dictionary 吗?或者是创建自定义 HashMap 的目标?
  • 我不能像 HashMap 这样使用字典,这就是我制作自定义字典的原因

标签: c#


【解决方案1】:

我认为您不希望您的 getValues() 方法返回 Map。如果要获取HashMap 中的值,则只需返回v 对象即可。

public List<object> getValues() {
    return v.AsReadOnly();
}

另外,您的HashMap 类具有通用变量,但它们没有在任何地方使用。你想用任何泛型类型替换object

private List<K> k = new List<K>();
private List<V> v = new List<V>();

改变你的功能

public V get(K k) {

【讨论】:

  • 在 java entrySet() 中返回键和值
  • 那么getValue() 具有误导性,Entry 是一种不同类型的对象,您当前的实现可能很难做到
  • 好的,如果我重新制作它,我可以工作吗?
猜你喜欢
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 2014-12-17
  • 2012-10-06
  • 2012-03-20
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多