0

我有一个继承层次结构,如下所示:

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,但它失败了,因为我试图通过类型而不是对象来执行此操作。有没有一种巧妙的方法可以在不传递对象的情况下获取属性名称?

4

2 回答 2

3

nameof(A.MyProperty).

你无论如何T都要约束。A

于 2020-08-20T15:23:36.627 回答
0

另一种选择是创建“虚拟”实例T

public void MyMethod<T>() where T : A
{
    var t = default(T);
    var str = nameof(t.MyProperty);
}

似乎编译器足够聪明,可以在发布配置中删除这个虚拟实例。

于 2020-08-20T15:32:43.893 回答