-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
return (HashSet) this[typeof(T)];

ステートメントを部分に分割させてください。

(1)this[...]のインデクサーを使用することを意味しthisます。そしてthis基本的には「このオブジェクト」を意味します。

(2) インデクサーは を受け入れますType。そして、このインデクサーへの呼び出しでは、引数はtypeof(T)です。

(3)の型に対応するオブジェクトをtypeof取得します。この場合、ジェネリック型パラメーター. そして、インデクサーは.Type()Tobject

インデクサーのパラメーター ( 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. KeyedCollection: https://msdn.microsoft.com/en-us/library/ms132438(v=vs.110).aspx

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

于 2015-11-10T05:35:38.243 に答える