如何将字符串长度限制为特定数字?

时间:2009-11-17 06:00:43

标签: c#

在C#中,如果我们有一个“员工”类,它将有一个名为“代码”的属性,该属性必须包含以下格式的7个字符:< strong>(AZ)+(1-9)+(0-1)+(0001-9999)

例如'代码'= A501234 Z910002

因此,如果我们在类“员工”中创建属性“代码”,那么在“代码”时有任何方法强制开发人员设置,检查它是否是prev格式或至少强迫他将其设置为7个字符,这样,例如,它可能导致编译器或构建错误?

提前感谢您期待的合作

6 个答案:

答案 0 :(得分:3)

public struct Code
{
    public readonly String Value;

    public Code(String value)
    {
        if (value == null) throw new ArgumentNullException("value");
        if (value.Length != 7) throw new ArgumentException("Must be 7 characters long.");

        // Other validation.

        Value = value;
    }
}

答案 1 :(得分:2)

public string Code
{
    set
    {
        if (value.Length != 7)
        {
            throw new ArgumentOutOfRangeException(...)
        }
        // other validation
        _code = value;
    }
}

答案 2 :(得分:1)

您可以在属性的setter部分执行此操作。

public string Code
{
    set 
    {
        if (value.Length != 7)
            throw new Exception("Length must be 7.");
        _code = value;
    }
}

答案 3 :(得分:1)

在属性的setter中,你可以检查长度并抛出错误,如果是!= 7

要检查确切的格式,您可以使用regular expressions

答案 4 :(得分:1)

运行时验证参数值/格式也可以使用 来自MS Enterprise库的Validation Application Block或类似的东西。

您基本上会使用属性

指定验证规则
[StringLengthValidator(1, 50, Ruleset = "RuleSetA", 
           MessageTemplate = "Last Name must be between 1 and 50 characters")]
public string LastName
{
    get { return lastName; }
    set { lastName = value; }
}

[RelativeDateTimeValidator(-120, DateTimeUnit.Year, -18, 
               DateTimeUnit.Year, Ruleset="RuleSetA", 
               MessageTemplate="Must be 18 years or older.")]
public DateTime DateOfBirth
{
    get { return dateOfBirth; }
    set { dateOfBirth = value; }
}

[RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", 
             Ruleset = "RuleSetA")]
public string Email
{
    get { return email; }
    set { email = value; }
}

来自http://msdn.microsoft.com/en-us/library/dd139849.aspx的代码段。不知道在编译时会检查的任何内容。

答案 5 :(得分:0)

Regular expression可以一次验证长度和格式。

class Employee
{
   // ...
   private string code;
   public string Code
   {
      set
      {
         Regex regex = new Regex("^[A-Z]{1}[1-9]{1}[0,1]{1}[0-9]{3}[1-9]{1}$");
         Match match = regex.Match(value);
         if (!match.Success)
         {
            throw new ArgumentException("Employee must be in ... format");
         }            
         code = value;
       }
    }
   // ...
}