c# – 为从Dictionary派生的类启用foreach
发布时间:2020-12-15 19:48:50 所属栏目:百科 来源:网络整理
导读:我有一个派生自Dictionary的类.我需要这个类来模拟HashSet,因为Silverlight不知道HashSets,而且我的类大量使用HashSet.所以我决定用字典交换HashSet.为了进一步将我的类与所有HashSet-Objects一起使用,我尝试创建一个自定义的HashSet类,它派生自Dictionary并
我有一个派生自Dictionary的类.我需要这个类来模拟HashSet,因为Silverlight不知道HashSets,而且我的类大量使用HashSet.所以我决定用字典交换HashSet.为了进一步将我的类与所有HashSet-Objects一起使用,我尝试创建一个自定义的HashSet类,它派生自Dictionary并覆盖所有相关方法,如Add-method:
class HashSet<T> : Dictionary<T,object> { public override void Add(T element) { base.Add(element,null); } } 现在我需要为我的新HashSet类启用foreach-loop.显然,我的类在foreach循环中返回一个KeyValuePair,但我需要T作为返回类型.谁能告诉我,我需要覆盖Dictionary基类的内容和方式? 提前致谢, 解决方法
我强烈建议你不要首先从Dictionary中派生出来.使用组合而不是继承.如果从派生词派生,人们可以将您的类用作键/值对的字典而不是集合.
所以,你用它里面的字典来设计你的类: public sealed class DictionaryBackedSet<T> : IEnumerable<T> { private readonly Dictionary<T,int> dictionary = new Dictionary<T,int>(); public IEnumerator<T> GetEnumerator() { return dictionary.Keys.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public bool Add(T item) { if (Contains(item)) { return false; } dictionary.Add(item,0); return true; } public bool Contains(T item) { return dictionary.ContainsKey(item); } // etc } 您可能还想创建一个空结构作为字典的值类型参数: public struct Empty {} 这可能会节省一点内存.我现在不担心它 – 如果你编写字典而不是继承它,那么以后做出改变不会破坏任何东西:) 如果您可以为此目的使用System.Void(即使用Dictionary< T,Void>),那将是很好的,但C#不会让你这样做:( (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |