例如设置属性字符串的长度

时间:2017-03-01 12:31:51

标签: c# class

如果我在c#中声明一个类,我可以设置字符串长度等属性吗?

e.g。说我的课是:

public class MyClass
{
    public string SomeString1 {get; set;}
    public string AnotherString2 {get; set;}
}

有没有办法指定SomeString1只有x个字符长?

2 个答案:

答案 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框架中有几种不同的验证路径

一些示例包括IDataErrorInfoINotifyDataErrorInfoValidationRule

哪一个适合你取决于你在做什么

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)
}