将枚举/编译值作为参数传递给构造函数

本文关键字:参数传递 构造函数 枚举 编译 | 更新日期: 2023-09-27 18:32:10

目前我正在为我的 mvc 应用程序编写自己的 ValidationAttribute。

我有以下验证属性代码。

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Parameter, AllowMultiple = false)] 
public class RecordAttribute: ValidationAttribute
{
   public UniqueDataRecordAttribute(string primaryKeyProperty)
   {
   }
}

我将主要属性的字段名称作为字符串传递给我的属性并进行 sone 验证。例如:

[RecordAttribute("CustomerID")]
public class CustomerMetaData
{

}

这对我有用,但如果主键的名称发生变化,我会遇到问题。

我创建了一个包含主键属性的枚举。但是当我尝试传递它时,编译器告诉我:

属性参数必须是常量表达式,类型表达式 或属性参数类型的数组创建表达式

我也尝试了这种方法:在 C# 中将枚举与字符串相关联,但效果是相同的。

是否有机会将枚举(或其他编译值)传递给我的属性?

谢谢

将枚举/编译值作为参数传递给构造函数

你想做这样的事情吗?

[RecordAttribute(Keys.CustomerID.ToString())] 
public class CustomerMetaData 
{ 
}

这是行不通的,因为 Keys.CustomerID.ToString() 返回的字符串不是常量。

您可以使用常量字符串字段的静态类代替枚举吗?

static class Keys {
  public const string CustomerID = "CustomerID";
}

然后这将起作用:

[RecordAttribute(Keys.CustomerID)] 
public class CustomerMetaData 
{ 
}