想要一些帮助理解这种方法

时间:2015-11-10 05:18:46

标签: c# keyedcollection

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)];尽可能的例子。 谢谢

2 个答案:

答案 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语句将值返回给调用者。

了解更多信息:

  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