如果我在c#中声明一个类,我可以设置字符串长度等属性吗?
e.g。说我的课是:
public class MyClass
{
public string SomeString1 {get; set;}
public string AnotherString2 {get; set;}
}
有没有办法指定SomeString1只有x个字符长?
答案 0 :(得分:1)
您可以使用.NET DataAnnotations类中的StringLengthAttribute:
[StringLength(40, ErrorMessage = "Name cannot be longer than 40 characters.")]
public string YourString { get; set; }
如果您在MVC中工作,这些DataAnnotations将在传入请求中得到验证,并且任何错误消息都可以自动显示在您的相关视图中。
如果您不在MVC中工作,或者只想验证类实例ad-hoc,您可以使用Validator类:How to manually validate a model with attributes?
答案 1 :(得分:1)
您要求的是验证,.net框架中有几种不同的验证路径
一些示例包括IDataErrorInfo,INotifyDataErrorInfo和ValidationRule
哪一个适合你取决于你在做什么
WPF旨在自动将这些包含在视图中,因此提供了一些很好的示例,例如here,但它们也适用于手动验证测试
public class MyClass: IDataErrorInfo
{
public string SomeString1 { get; set; }
public string AnotherString2 { get; set; }
public bool IsValid
=> string.IsNullOrWhiteSpace(Error);
public string Error
=> this["All"];
public string this[string field]
{
get
{
string err = "";
if (field == "All" || "SomeString1" == field)
{
if (SomeString1.Length > 15)
err += "SomeString1 > 15";
if (SomeString1.Length < 5)
err += "SomeString1 < 5";
}
if (field == "All" || nameof(AnotherString2) == field )
{
err += StringLenthRule(AnotherString2, nameof(AnotherString2), 30, 20);
}
return err;
}
}
private string StringLenthRule(string str, string prop,int max, int min)
{
string err = "";
if (str.Length > max)
err += $"{prop} > {max}\n";
if (str.Length < min)
err += $"{prop} < {min}\n";
return err;
}
}
然后你会做
MyClass node = new MyClass(xmlNode);
if(node.IsValid)
{
//use class
}
else
{
display(node.Error)
}