输入无效输入时,我没有异常

时间:2016-03-14 17:11:01

标签: c# oop exception

我的代码有问题。当我输入一个无效的输入时,它应该给我一个例外,但它没有,而是它返回值,就像它的正确一样 这是我的班级

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”,这应该给我一个例外,但事实并非如此。

如果我为我的名字输入“”,它应该给我一个例外,但事实并非如此。

我找不到我的错误,我会感激一些帮助。

2 个答案:

答案 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;