在C#中,如果我们有一个“员工”类,它将有一个名为“代码”的属性,该属性必须包含以下格式的7个字符:< strong>(AZ)+(1-9)+(0-1)+(0001-9999)
例如'代码'= A501234 或 Z910002
因此,如果我们在类“员工”中创建属性“代码”,那么在“代码”时有任何方法强制开发人员设置,检查它是否是prev格式或至少强迫他将其设置为7个字符,这样,例如,它可能导致编译器或构建错误?
提前感谢您期待的合作
答案 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;
}
}
// ...
}