将标记属性的信息传递到自定义属性

时间:2017-04-18 16:23:59

标签: c# .net reflection custom-attributes system.reflection

我正在尝试创建一个自定义属性,其中一个参数是该属性所用属性的属性名称。

我认为在输入时没有多大意义,所以这是我想要做的一个例子:

[Test(x => x.Paws)]
public Dog Dog { get; set; }

如您所见,我在 Dog 上使用了该属性,并使用lambda表达式将dog的 paws 属性传递给属性的构造函数。

这可能吗? 到目前为止,我提出的最好的是以下内容:

[Test(nameof(Dog.Paws)]
public Dog Dog { get; set; }

此解决方案不是最佳的原因是因为没有类型检查(我也可以写 nameof(Cat.Tail)

所以我的问题是;这可能吗?如果是这样,一个人会怎么做?

1 个答案:

答案 0 :(得分:0)

不幸的是,这是不可能做到的。属性仅接受少数几种类型作为参数:

来自:https://msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx#vcwlkattributestutorialanchor1

  
      
  • 原始类型(bool,byte,char,int等)
  •   
  • 字符串
  •   
  • 类型(System.Type
  •   
  • 枚举
  •   
  • 物体
  •   
  • 一维数组
  •   

但使用nameof()您的apporach是一个不错的选择。请注意,您也可以使用typeof()