如果我有这样的类(class):
public class ClassA
{
public string MyProperty {get; set;}
}
public class ClassB
{
public ClassA ClassA {get; set;}
[MyAttribute(nameof(ClassA.MyProperty))]
public void MyMethod()
{
}
}
public sealed class MyAttribute : Attribute
{
public string MyProperty {get; private set;}
public MyAttribute(string myProperty)
{
MyProperty = myProperty;
}
}
然后,[MyAttribute(nameof(ClassA.MyProperty))]
中的 ClassA
被解析为属性,而不是导致编译时错误的类 (非静态字段、方法或属性“ClassB.ClassA”需要对象引用
)。如果我重命名该属性,那么它将被解析为该类并且它可以工作。
是否可以指定我希望它解析为类而不必重命名属性?
最佳答案
目前,我没有找到属性“隐藏”同名类的重复项,但假设问题中的代码是在名为 的
,只需指定属性的 fully-qualified name ...namespace
中定义的MyNamespace
[MyAttribute(nameof(MyNamespace.ClassA.MyProperty))]
public void MyMethod()
{
}
请注意nameof()
无论您如何限定实体,都会返回相同的名称。例如,在以下 Main()
方法的末尾...
namespace MyNamespace
{
class MyClass
{
object MyProperty { get; set; }
static void Main()
{
string name1 = nameof(MyNamespace.MyClass.MyProperty);
string name2 = nameof(MyClass.MyProperty);
string name3 = nameof(MyProperty);
}
}
}
...变量name1
、name2
和name3
都将包含“MyProperty”
。
关于c# - 您能否指定如何解析属性中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60070038/