所以我需要创建一个包含以下信息的课程,我已创建或至少创建了一个以下信息最多的课程,但我怎么设置预科编号和年份分数和我想知道是否有人可以帮助我
在C#中实现一个类型为Student的类,该类应该包含在一个文件中 Student.cs。该类应符合以下规范:
属性示例数据验证
FirstName“Basil”不是空白
SecondName“Fawlty”不是空白
出生日期19/08/1946不是空白
课程“MA酒店管理”不是空白
预科编号12345在10000至99999范围内
年份标记55在范围0 -100
中 到目前为止,对于我的班级来说,这是我所拥有的,希望到目前为止它是正确的namespace Student
{
public class Student
{
private string firstname;
private string secondname;
private double dateofbirth;
private string course;
private int matricnumber;
private int yearmark;
public Student()
{
firstname = "Basil";
secondname = "Fawlty";
dateofbirth = 23/08/1946;
course = "MA Hotel Management";
matricnumber = 12345;
yearmark = 55;
}
public string FirstName
{
get { return firstname; }
set { firstname = value; }
}
public string SecondName
{
get { return secondname; }
set { secondname = value; }
}
public double DateOfBirth
{
get { return dateofbirth; }
set { dateofbirth = value; }
}
public string Course
{
get { return course; }
set { course = value; }
}
public int Matricnumber
{
get { return matricnumber; }
set { matricnumber = value; }
}
public int YearMark
{
get { return yearmark; }
set {yearmark = value; }
}
}
}
答案 0 :(得分:2)
您可以在setter中实现一些逻辑,以检查该值是否有效。所以假装我需要一个名为LastName
的属性,这个属性只能是“约翰逊”,“史密斯”或“罗伯茨”。我可以这样做:
private string _lastName;
public string LastName
{
get { return _lastName; }
set
{
if (value == "Johnson" || value == "Smith" || value == "Roberts")
{
_lastName = value;
}
else
{
// Do something here. Maybe set a default. Maybe throw an exception. Whatever.
}
}
}
免责声明:我没有写一个完全解决方案,因为它听起来真的是这是家庭作业。
答案 1 :(得分:2)
您需要将数据验证放在“set”方法中。如果用户输入无效值,则抛出异常。
public int Matricnumber
{
get { return matricnumber; }
set {
if (value > 99999 | value < 10000)
throw new ArgumentException("Invalid value - MaticNumber must be in the range 10000-99999");
matricnumber = value;
}
}
在不能为空的值上,您可能需要提供某种类型的Validate()方法,以便在事后使用String.IsNullOrEmpty进行验证,因为使用默认值初始化类是没有意义的。
这有意义吗?
答案 2 :(得分:1)
如果您想在课程上/通过课程进行验证,您可以执行以下操作:
public int Matricnumber
{
get { return matricnumber; }
set
{
if (value < MinMatric || value > MaxMatric)
throw new ArgumentOutOfRangeException("Matricnumber");
matricnumber = value;
}
}
答案 3 :(得分:0)
您的问题未指定您希望阻止设置错误值的行为。
一般情况下,对于您指定的限制要求,我会成为code contracts的粉丝。以下是使用合同解决问题的一种方法。
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant( matricnumber <= 99999 );
Contract.Invariant( matricnumber >= 10000 );
Contract.Invariant( yearmark <= 100 );
Contract.Invariant( yearmark >= 0 );
}
这需要您安装Microsoft here的代码约定,并启用运行时检查。 ContractInvariantMethod
提供在进入和退出方法时必须为true的不变量。如果不变量不成立,则抛出异常。但是,您可以配置不同的故障行为。
Contract
类还有其他成员,您可以在应用限制的属性中使用。
更传统的解决方案是使用条件语句来检查设置和处理错误的要求(抛出异常,不采取任何操作,设置为最接近的边界等)。