C# 如何在属性构造函数中指定属性路径而不直接使用字符串

C# 如何在属性构造函数中指定属性路径而不直接使用字符串,c#,attributes,C#,Attributes,我正在构建一个业务规则引擎,我想在规则中添加属性修饰,以定义规则将应用于的属性。我希望能够用点符号来定义路径,而不是使用字符串 [RunRuleOn(MapPath<SomeObject>(p=>p.SomeProperty))] public class MyRule { ... } 用法:[RunRuleOn(typeof(SomeObject),nameof(SomeObject.SomeProperty))C#6.0引入了一个名为nameof的新操作符,它接受code

我正在构建一个业务规则引擎,我想在规则中添加属性修饰,以定义规则将应用于的属性。我希望能够用点符号来定义路径,而不是使用字符串

[RunRuleOn(MapPath<SomeObject>(p=>p.SomeProperty))]
public class MyRule
{
...
}
用法:
[RunRuleOn(typeof(SomeObject),nameof(SomeObject.SomeProperty))
C#6.0引入了一个名为nameof的新操作符,它接受code元素的名称并返回同一元素的字符串文本。nameof运算符可以将类名及其所有成员(如方法、变量、属性)作为参数,并返回字符串文本。这避免了在代码中指定硬编码字符串,也避免了显式使用反射来获取名称。 您可以使用:

[RunRuleOn(nameof(SomeObject.SomeProperty))]
编辑:

如果您想获得[ClassName][ProeprtyName]您应该使用:

[RunRuleOn(nameof(Product) + "." + nameof(Product.Title))]
C#6.0引入了一个名为nameof的新操作符,它接受code元素的名称并返回同一元素的字符串文本。nameof运算符可以将类名及其所有成员(如方法、变量、属性)作为参数,并返回字符串文本。这避免了在代码中指定硬编码字符串,也避免了显式使用反射来获取名称。 您可以使用:

[RunRuleOn(nameof(SomeObject.SomeProperty))]
编辑:

如果您想获得[ClassName][ProeprtyName]您应该使用:

[RunRuleOn(nameof(Product) + "." + nameof(Product.Title))]

这只会导致“someproperty”@Bacon,修正!我最终使用了类似的[RunRuleOn(typeof(SomeType),nameof(SomeType.SomeProperty))]-谢谢!(因打字错误而编辑)这只会导致“someproperty”@Bacon,已修复!我最终使用了类似的[RunRuleOn(typeof(SomeType),nameof(SomeType.SomeProperty))]-谢谢!(因打字错误而编辑)