我正在尝试创建一个自定义属性,其中一个参数是该属性所用属性的属性名称。
我认为在输入时没有多大意义,所以这是我想要做的一个例子:
[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)。
所以我的问题是;这可能吗?如果是这样,一个人会怎么做?
答案 0 :(得分:0)
不幸的是,这是不可能做到的。属性仅接受少数几种类型作为参数:
来自:https://msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx#vcwlkattributestutorialanchor1
- 原始类型(bool,byte,char,int等)
- 字符串
- 类型(
System.Type
)- 枚举
- 物体
- 一维数组
但使用nameof()
您的apporach是一个不错的选择。请注意,您也可以使用typeof()
!