在C#中的HashMap 'GetEnumerator'。

30 浏览
0 Comments

在C#中的HashMap 'GetEnumerator'。

这个问题已经有答案了:

如何实现IEnumerable< T >

支持foreach而不实现IEnumerable的示例

试图制作一个自定义的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 k = new List();
    private List v = new List();
    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;
    }
}


我的Map类看起来像这样。我认为这个类是无用的...

public class Map<K,V> {
    private List k = new List();
    private List v = new List();
    public Map(List k, List 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();
} 

admin 更改状态以发布 2023年5月23日
0
0 Comments

我认为你不想让你的getValues()方法返回一个Map。如果你想要获取HashMap中的值,那么只需返回v对象。

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

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

例如:

private List k = new List();
private List v = new List();

并更改你的函数

例如:

public V get(K k) {

0