【问题标题】:Passing info of marked property into custom attribute将标记属性的信息传递给自定义属性
【发布时间】:2017-09-14 14:31:19
【问题描述】:

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

我猜这在输入时没有多大意义,所以这是我正在尝试做的一个示例:

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

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

这可能吗? 到目前为止,我想出的最好的是:

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

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

所以我的问题是;这可能吗?如果是这样,如何做到这一点?

【问题讨论】:

  • 不,您不能在属性中使用 lambda 表达式。我只会使用nameof,然后添加一个单元测试以确保所有属性值都是合适的。

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


【解决方案1】:

很遗憾,这是无法做到的。属性只接受少数几种类型作为参数:

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

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

不过,您使用nameof() 的方法很好。请记住,您也可以使用typeof()

【讨论】:

  • 这就是我所担心的。哦,好吧,我会用 nameof 代替。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2021-01-08
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多