这是我的第一篇文章,所以我提前为一些错误道歉,英语也不是我的母语。 什么更好,为什么?请记住,我正和另外两个人一起工作,我们将会有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.
是否有第三种更合适的选择?我甚至不知道使用例外是否可行。
提前谢谢!
答案 0 :(得分: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");
答案 1 :(得分: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();
P.S。:我将People
重命名为Person
,因为它会让我看到它,因为它会容纳一个人而不是多个人 - 如果我错了就会忽略它......
答案 2 :(得分: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;
}
}
}