是否有一种方法可以使用常量表达式作为属性参数?

时间:2019-04-19 06:31:47

标签: c# expression constants

我想使用Settings类中的“静态只读”字段,这是我所有硬编码代码所在的位置,例如错误消息和常量,位于ViewModel的[StringLength]属性中。但是,StringLength不接受不是常量表达式,typeof表达式或数组表达式的属性参数。但是,我使用的字段不能更改为常量表达式,因为它使用其他常量字段,因此会出现错误。

我知道可以通过使用字符串和常量表达式来解决此问题

之所以要这样做,是因为如果将来我要更改一些硬编码的代码,它将使事情变得很容易更改。硬编码的代码具有相同的要求,因此可以在多个位置(例如模型类和视图模型)中使用。

我尝试为该字段使用属性获取器,该属性获取器是一个常数,但似乎也不起作用。我已经搜索过Google Stackoverflow,但似乎找不到完全相同的问题。

我还尝试使用string.Format()作为参数,尽管这不是我想要的解决方案,因为那样我仍然必须在多个位置更改此消息。

在StringLength行中的Settings.LastNameLength发生错误。

    public class DeelnemerViewModels
    {
...
        [Display (Name = "Lastname", Prompt = "Doe")]
        [Required (ErrorMessage = Settings.fieldNeeded)]
        [StringLength (Settings.maxAmountOfCharactersLastName, MinimumLength = Settings.minAmountOfCharactersLastname, ErrorMessage = Settings.LastNameLength)]
        public string Lastname { get; set; }
...

    }
    public static class Settings
    {
...
        public const int minAmountOfCharactersLastname = 2;
        public const int maxAmountOfCharactersLastName = 50;

        public static readonly string LastNameLength =
            "The lastname does not fit the requirements. The lastname must atleast be "
            + minAmountOfCharactersLastname + " characters long and at max "
            + maxAmountOfCharactersLastName + " characters long.";
...
    }

0 个答案:

没有答案