-2
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)]; 如果可能的话,举个例子。谢谢你

4

2 回答 2

0

它正在使用泛型。一种现代编程概念,使设计类和方法成为可能,这些类和方法将一种或多种类型的规范推迟到客户端代码声明和实例化类或方法之前。

在您的示例中,它定义了一个可以保存任何类型的哈希集。

阅读我提供的链接中的 MSDN 文档,如果您有更具体的问题,请在此处发布。

于 2015-11-10T05:27:28.473 回答
0
return (HashSet) this[typeof(T)];

让我把声明分成几部分。

(1)this[...]表示使用 的索引器thisthis基本上意味着“这个对象” 。

(2) 索引器接受一个Type. 在对索引器的调用中,参数是typeof(T).

(3)typeof获取一个Type(). 在这种情况下,泛型类型参数T。并且索引器返回一个object.

索引器的参数 ( Type) 和返回类型 ( object) 可以从类的基类型中推断出来:KeyedCollection<Type, object>。我想你可以理解这一点。

(4) 索引器返回的值被转换为HashSet<T>. 同样,T是泛型类型参数。

return(5) 该值由语句返回给调用者。

了解更多信息:

  1. 索引器:https ://msdn.microsoft.com/en-us/library/6x16t2tx.aspx

  2. 泛型:https ://msdn.microsoft.com/en-us/library/512aeb7t.aspx

  3. 选角:https ://msdn.microsoft.com/en-us/library/ms173105.aspx \

  4. KeyedCollectionhttps ://msdn.microsoft.com/en-us/library/ms132438(v=vs.110).aspx

  5. typeofhttps ://msdn.microsoft.com/en-us/library/58918ffs.aspx

于 2015-11-10T05:35:38.243 回答