我的代码有问题。当我输入一个无效的输入时,它应该给我一个例外,但它没有,而是它返回值,就像它的正确一样 这是我的班级
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
namespace Lecture_1_Homework
{
public class Person
{
private string name;
private int age;
private string email;
public string Name
{
get
{
return this.name;
}
set
{
if (!ValidateName(name))
{
throw new ArgumentException("You need to enter your name.");
}
this.name = value;
}
}
public int Age
{
get
{
return this.age;
}
set
{
if (!ValidateAge(age))
{
throw new ArgumentException("Your age must be between 1 and 100");
}
this.age = value;
}
}
public string Email
{
get
{
return this.email;
}
set
{
if (!ValidateEmail(email))
{
throw new ArgumentException("Invalid email input");
}
this.email = value;
}
}
private bool ValidateName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return false;
}
return true;
}
private bool ValidateAge(int age)
{
if (age > 100 || age < 1)
{
return false;
}
return true;
}
private bool ValidateEmail(string email)
{
try
{
MailAddress mail = new MailAddress(email);
return true;
}
catch (FormatException)
{
return false;
}
}
public Person(string name, int age, string email)
{
this.name = name;
this.age = age;
this.email = email;
}
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
public void ToString()
{
Console.Write("Name:{0}\nAge:{1}\nEmail:{2}\n",this.name,this.age,string.IsNullOrWhiteSpace(this.email) ? "no email given" : this.email);
}
}
}
这是我的主要
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lecture_1_Homework
{
class Persons_main
{
static void Main()
{
Person Peter = new Person("Peter", 18, "test123@yahoo.com");
Person Jake = new Person("Jake", 19);
Peter.ToString();
Jake.ToString();
}
}
}
如果我输入一个大于100或小于1的数字,它应该给我一个例外,但它没有。
如果我没有输入名称,它应该给我一个例外,但事实并非如此。
如果我为我的电子邮件输入了错误的格式,它应该给我和例外,但事实并非如此。
例如,如果我输入我的电子邮件“test123mail.com”,这应该给我一个例外,但事实并非如此。
如果我为我的名字输入“”,它应该给我一个例外,但事实并非如此。
我找不到我的错误,我会感激一些帮助。
答案 0 :(得分:1)
您需要验证传入的值,而不是属性。
ValidateName(value)
而不是
ValidateName(name)
将值分配给属性时,请使用
this.Name = value; // instead of this.name
答案 1 :(得分:1)
两件事......
首先,您在设置之前验证变量:
我认为你想要验证属性的传入值: 其次,您需要直接设置支持变量 而不验证它们: 验证位于属性设置器中,因此请改用:ValidateName(name)
ValidateName(value)
this.name = name;
this.Name = name;