C# 泛型:如何使用 nameof 获取基的名称 class 属性

C# Generics: How to use nameof to get the name of a base class property

我有如下继承层次结构:

public abstract class A
{
    public string MyProperty {get; set;}
}

public class B : A
{
    
}

public class C : A
{
   
}

然后我有一个使用泛型的方法:

public void MyMethod<T>() where T : A
{
    var str = nameof(T.MyProperty); // this one fails
}

我试图获取 MyProperty 的名称,但它失败了,因为我试图通过类型而不是对象来完成此操作。有没有一种无需传递对象即可获取 属性 名称的巧妙方法?

nameof(A.MyProperty).

无论如何,您将 T 限制为 A

另一种选择是创建 T:

的“虚拟”实例
public void MyMethod<T>() where T : A
{
    var t = default(T);
    var str = nameof(t.MyProperty);
}

编译器似乎 smart enough 在发布配置中删除了这个虚拟实例。