0

次の 2 つのクラスを受講します。

class NonGenericClass
{
    public string Member { get; set; }
}

class GenericClass<T>
{
    public string Member { get; set; }
}

私はこれを簡単に行うことができます:

nameof(NonGenericClass.Member)

しかし、私はこれを行うことはできません:

nameof(GenericClass.Member)

私はこれを行うことができます:

nameof(GenericClass<object>.Member)

しかし、私はしたくありません。

私がやりたくない方法でそれを行うことに頼ることなく、私がやりたいことをする方法はありますか?

4

1 に答える 1

3

いいえ、nameof型引数を指定せずにジェネリック型 (またはそのジェネリック型のメンバー) を使用する方法はありません。個人的には、でできるようにオープンタイプを指定できるようtypeofにしたいと思います。

// Would be nice, but isn't valid
string name = nameof(GenericClass<>.Member);

...これにより、異なるアリティを持つ異なるジェネリック型を同じ方法で区別できます(など)がGenericClass<,>GenericClass<,,>現時点では有効ではありません。これについてはすでに機能要求があり、ある程度サポートされていますが、C# 7 には含まれないことは間違いありません。せいぜい C# 8 よりも前に実現したとしたら、私は驚くでしょう。

GenericClass<int>.Member鼻をつまんで、または同様のものを使用することをお勧めします。その中断をもたらす変更は、これよりもはるかに悪い問題を引き起こす可能性があります。使用する型引数に一貫性がある場合は、単純な検索と置換で修正できます。

于 2016-12-17T20:59:50.437 に答える