2

这是我的第一篇文章,所以我提前为一些错误道歉,而且英语不是我的母语。什么更好,为什么?请记住,我正在与另外两个人一起工作,我们将有 4 个代表不同类型的人的类,每个类将有大约 15 个属性。

A - 为同一类中的类的每个属性创建验证:

public class People
{
    string name { get; set; }

    private void ValidateName()
    {
        if(this.name.Contains("0", ..., "9"))
            throw new Exception("Name can't contain numbers.");
    }
}

或 B - 创建一个类(可能是静态类?)仅用于验证:

public class People
{
    string name { get; set; }
}

static class Validation
{
    static void Name(string name)
    {
        if(name.Contains("0", ..., "9"))
            throw new Exception("Name can't contain numbers.")
    }
}

//and then somewhere in the code I call the Validation.Name(name) to verify if the code is ok.

有第三种更合适的选择吗?我什至不知道是否使用异常是要走的路。

先感谢您!

4

3 回答 3

2

您可以在构造函数中实例化时使用您的方法引发错误,如下所示

public class People
    {
        string name { get; set; }

        public People(string n)
        {
            if (ValidateName(n))
            {
                this.name = n;
            }
        }

        private bool ValidateName(string n)
        {
            char[] nums = "0123456789".ToCharArray();
            if (n.IndexOfAny(nums) >= 0)
            {
                throw new Exception("Name can't contain numbers.");
            }
            return true;
        }
    }

使用上面的代码,下面会抛出异常。

People p = new People("x1asdf");

这将是一个成功的实例化

People p = new People("xasdf");
于 2013-08-20T14:22:20.720 回答
0

您好,您可以使用属性来验证数据。

public class Person
{
    private string name;
    string Name { 
    get{return name;} 
    set
    {
        //Validation Logic
        if(name.Trim() == ""){throw new Exception("Invalid value for Name.");}
        //If all validation logic is ok then
        name = value;
    }
    }
}
于 2015-02-17T18:04:56.873 回答
0

第三种可能的方法是使用扩展方法——我个人喜欢这样,因为它与第一种方法一样易于使用,但仍将逻辑分开:

public class Person
{
    string Name { get; set; }
}

public static class Validation
{
    public static void ValidateName(this Person person)
    {
        if(person.Name.Contains("0", ..., "9"))
            throw new Exception("Name can't contain numbers.")
    }
}

如前所述,这可以像这样使用:

var person = new Person() { Name = "Test123" };
person.ValidateName();

PS:我重命名PeoplePerson在我看来,因为它将容纳一个人而不是多个人-如果我错了,请忽略它...

于 2013-08-20T14:12:52.303 回答