C# 将标记属性的信息传递到自定义属性
我正在尝试创建一个自定义属性,其中一个参数是使用该属性的属性的属性名 我想这在打印出来时没有多大意义,所以这里有一个我正在尝试做的示例:C# 将标记属性的信息传递到自定义属性,c#,.net,reflection,custom-attributes,system.reflection,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; }
[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))
所以我的问题是:这可能吗?如果可能的话,人们会怎么做?不幸的是,这无法做到。属性只接受选择的几种类型作为参数: 发件人:
- 基本类型(bool、byte、char、int等)
- 弦
- 类型(
)System.Type
- 列举
- 反对
- 一维阵列
不过,您使用
nameof()
的方法很好。请记住,您也可以使用typeof()
。不幸的是,这无法完成。属性仅接受少数类型作为参数:
发件人:
- 基本类型(bool、byte、char、int等)
- 弦
- 类型(
)System.Type
- 列举
- 反对
- 一维阵列
不过,您使用
nameof()的方法是很好的。请记住,您可以使用typeof()
还有!不,您不能在属性中使用lambda表达式。我只需使用nameof
然后添加单元测试,以确保所有属性值都是适当的。不,您不能在属性中使用lambda表达式。我只需使用nameof
然后添加单元测试,以确保所有属性值是合适的。这就是我害怕的。哦,好吧,我会用nameof代替。这就是我害怕的。哦,好吧,我会用nameof代替。