在不知道类型的情况下使用 nameof 访问泛型 class 的成员

Using nameof to access member of generic class without knowing the type

拿这两个类:

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)

但我不想。

有没有一种方法可以做我想做的事,而不必以我不想做的方式去做?

不,如果不指定类型参数,就无法对泛型类型(或该泛型类型的成员)使用 nameof。我个人 喜欢 能够像使用 typeof 那样指定开放类型,即

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

... 这将允许以相同的方式(GenericClass<,>GenericClass<,,> 等)区分具有不同参数的不同泛型类型,但这目前是无效的。已经有一个 feature request 对此有一些支持,但它肯定不会出现在 C# 7 中,如果它最多出现在 C# 8 之前,我会感到惊讶。

我建议您捏着鼻子使用 GenericClass<int>.Member 或类似的。任何造成这种破坏的变化都可能造成比这更糟糕的问题。如果您对所使用的类型参数保持一致,简单的搜索和替换应该可以修复它。