4

次のジェネリック クラスを検討してください。

Dictionary<TKey, TValue>

List<T>

CustomHashMap<K, V>

ジェネリック型パラメーターに付けられた名前を反映することは可能ですか?

例えば

"TKey", "TValue"

"T"

"K", "V"
4

1 に答える 1

4

これはトリックを行うようです:

class Program
{
    static IEnumerable<string> GetGenericArgumentNames(Type type)
    {
        if (!type.IsGenericTypeDefinition)
        {
            type = type.GetGenericTypeDefinition();
        }

        foreach (var typeArg in type.GetGenericArguments())
        {
            yield return typeArg.Name;
        }
    }

    static void Main(string[] args)
    {
        // For a raw type
        Trace.WriteLine(string.Join(" ", GetGenericArgumentNames(typeof(Foo<>))));
        Trace.WriteLine(string.Join(" ", GetGenericArgumentNames(typeof(Foo<Quux>))));
    }

}

class Foo<TBar> {}

class Quux {}
于 2012-11-03T00:53:01.790 に答える