0

参加这两个课程:

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 回答