参加以下两个课程:
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)
但我不想。
有没有办法做我想做的事情而不必以我不想要的方式去做?
答案 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
或类似的东西。任何导致这种突破的变化都可能造成比这更糟糕的问题。如果您对使用的类型参数保持一致,则应通过简单的搜索和替换来修复它。