class SetMap : KeyedCollection<Type, object>
{
public HashSet<T> Use<T>(IEnumerable<T> sourceData)
{
var set = new HashSet<T>(sourceData);
if (Contains(typeof(T)))
{
Remove(typeof(T));
}
Add(set);
return set;
}
public HashSet<T> Get <T>()
{
return (HashSet<T>) this[typeof(T)];
}
protected override Type GetKeyForItem(object item)
{
return item.GetType().GetGenericArguments().Single();
}
}
有人会为我澄清这一点。 return(HashSet)this [typeof(T)];尽可能的例子。 谢谢
答案 0 :(得分:0)
正在使用generics。一种现代编程概念,可以设计类和方法,推迟一个或多个类型的规范,直到通过客户端代码声明和实例化类或方法。
在您的示例中,它定义了一个可以容纳任何类型的hashset。
请阅读我提供的链接中的MSDN文档,如果您有更具体的问题,请在此处发布。
答案 1 :(得分:0)
return (HashSet) this[typeof(T)];
让我将声明分成几部分。
(1)this[...]
表示使用this
的索引器。而this
基本上意味着&#34;这个对象&#34;。
(2)索引器接受Type
。在对索引器的调用中,参数为typeof(T)
。
(3)typeof
获取与Type
中的类型对应的()
对象。在这种情况下,泛型类型参数T
。索引器返回object
。
索引器的参数(Type
)和返回类型(object
)可以从类的基类型推断:KeyedCollection<Type, object>
。我想你可以理解这一点。
(4)索引器返回的值被转换为HashSet<T>
。同样,T
是泛型类型参数。
(5)通过return
语句将值返回给调用者。
了解更多信息: