c# - 您能否指定如何解析属性中的参数?

标签 c# .net

如果我有这样的类(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”需要对象引用)。如果我重命名该属性,那么它将被解析为该类并且它可以工作。

是否可以指定我希望它解析为类而不必重命名属性?

最佳答案

目前,我没有找到属性“隐藏”同名类的重复项,但假设问题中的代码是在名为 namespace 中定义的MyNamespace,只需指定属性的 fully-qualified name ...

[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);
        }
    }
}

...变量name1name2name3都将包含“MyProperty”

关于c# - 您能否指定如何解析属性中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60070038/

相关文章:

具有默认值的枚举的 C# Swagger 生成

c# - git 日志路径的 LibGit2Sharp 等价物是什么?

c# - 网络服务器在 IHostedService 启动之前开始处理请求

c# - 上传时调整宽度并保持高度比例成比例

c# - 命名:解决方案、项目、命名空间和程序集

c# - 每个请求的 AntiForgeryToken 更改

c# - 如何在 .net 中检索硬盘固件序列号?

.net - WPF:按钮中的奇怪图像拉伸(stretch)

c# - Exchange FindItem 响应一个项目 ID 和多个项目 ID 的不同属性集

c# - 如何为正则表达式词干制作通用前缀?