gpt4 book ai didi

C# HashSet2 与标准 C# HashSet 完全一样,无需编译

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:15 24 4
gpt4 key购买 nike

我正在创建我自己的 HashSet,它使用字典作为标准 HashSet。我这样做是因为 XNA XBox 的 C# 不支持 HashSet。

此代码基于我找到的一个示例中的代码。我已经编辑了示例以解决一些问题,但它仍然无法编译。

public class HashSet2<T> : ICollection<T>
{
private Dictionary<T, Int16> dict;

// code has been edited out of this example
// see further on in the question for the full class

public IEnumerator<T> GetEnumerator()
{
throw new NotImplementedException();
}

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return dict.GetEnumerator();
}
}

.

'HashSet2<T>' does not implement interface member
'System.Collections.IEnumerable.GetEnumerator()'.
'HashSet2<T>.GetEnumerator()' cannot implement
'System.Collections.IEnumerable.GetEnumerator()'
because it does not have the matching return type of
'System.Collections.IEnumerator'

如果它偏离其行为或它以可能无法预料的方式实现的内容,我也很感激有关将其修复为更像标准 HashSet 的信息。

接自:stackoverflow.com/questions/9966336/c-sharp-xna-xbox-hashset-and-tuple

该类的最新版本:

public class HashSet2<T> : ICollection<T>
{
private Dictionary<T, Int16> dict;
// Dictionary<T, bool>

public HashSet2()
{
dict = new Dictionary<T, short>();
}

public HashSet2(HashSet2<T> from)
{
dict = new Dictionary<T, short>();
foreach (T n in from)
dict.Add(n, 0);
}

public void Add(T item)
{
// The key of the dictionary is used but not the value.
dict.Add(item, 0);
}

public void Clear()
{
dict.Clear();
}

public bool Contains(T item)
{
return dict.ContainsKey(item);
}

public void CopyTo(
T[] array,
int arrayIndex)
{
throw new NotImplementedException();
}

public bool Remove(T item)
{
return dict.Remove(item);
}

public System.Collections.IEnumerator GetEnumerator()
{
return ((System.Collections.IEnumerable)
dict.Keys).GetEnumerator();
}

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return ((IEnumerable<T>)
dict.Keys).GetEnumerator();
}

public int Count
{
get {return dict.Keys.Count;}
}

public bool IsReadOnly
{
get {return false;}
}
}

最佳答案

您想枚举键,而不是字典。试试这个:

public IEnumerator GetEnumerator()
{
return ((IEnumerable)dict.Keys).GetEnumerator();
}

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return ((IEnumerable<T>)dict.Keys).GetEnumerator();
}

关于C# HashSet2 与标准 C# HashSet 完全一样,无需编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10246572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com