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

时间:2016-12-17 20:51:29

标签: .net nameof

参加以下两个课程:

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)

但我不想。

有没有办法做我想做的事情而不必以我不想要的方式去做?

1 个答案:

答案 0 :(得分:2)

不,没有指定类型参数,就无法使用nameof作为泛型类型(或该泛型类型的成员)。我个人喜欢能够使用typeof指定开放类型,即

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

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

我建议你抓住你的鼻子并使用GenericClass<int>.Member或类似的东西。任何导致这种突破的变化都可能造成比这更糟糕的问题。如果您对使用的类型参数保持一致,则应通过简单的搜索和替换来修复它。