【发布时间】:2015-08-28 05:05:39
【问题描述】:
我通过;声明了 4 个对象数组
Student[,] s2 =new BSIT[10,4];
s2[studCount,iden] = new BSIT();
Student[,] s3 = new BSCS[10,4];
s3[studCount,iden] = new BSCS();
Student[,] s4 = new MSIT[10,4];
s4[studCount,iden] = new MSIT();
Student[,] s5 = new MSCS[10,4];
s5[studCount,iden] = new MSCS();
然后我做了一些 case switch 语句,要求输入如下名称:
case 1://BSIT
{
iden=0;
Console.Write("Enter Name: ");
(s2[studCount,iden]).setName(Console.ReadLine());
do
{
Console.Write("Enter Age(15-30 only): ");
int a = int.Parse(Console.ReadLine());
if(a>=15 && a<=30)
{
(s2[studCount,iden]).setAge(a);
valid=1;
}
else
{
valid=0;
Console.WriteLine("INVALID INPUT. TRY AGAIN.");
}
}
while(valid==0);
}
但是当我尝试只在其他其他对象上输入名称时:
case 2://BSCS
{
iden = 1;
Console.Write("Enter Name: ");
(s3[studCount,iden]).setName(Console.ReadLine());
do
{
Console.Write("Enter Age(15-30 only): ");
int a = int.Parse(Console.ReadLine());
if(a>=15 && a<=30)
{
(s3[studCount,iden]).setAge(a);
valid=1;
}
else
{
valid=0;
Console.WriteLine("INVALID INPUT. TRY AGAIN.");
}
}
while(valid==0);
}
它给了我 System.NullReferenceException: Object Reference not set to instance of object。
是的,基类(称为“Student”)具有所有“Name”setter 和 getter,而派生类 BSIT 和 BSCS 都只是从 Student 类中获取“Name”字段。
为什么我为 BSIT 输入信息时程序可以正常工作,但不能为 BSCS、MSIT 和 MSCS 输入信息? MSIT 和 MSCS 遵循与 BSIT 和 BSCS 完全相同的格式,但它们仍然不起作用。
【问题讨论】:
-
哦,澄清一下,BSCS 也不起作用,即使它遵循与 BSIT 相同的格式。
-
尝试在 BSCS 中设置
iden = 0并检查是否仍然抛出异常? -
我做不到。我需要 BSCS 中的 iden = 1 因为 iden = 0 用于 BSIT。 iden = 1 用于 BSCS,iden = 2 用于 MSIT,iden=3 用于 MSCS。如果我将其设置为零,它会起作用,但我稍后会覆盖一些数据。
-
不,您不会覆盖它,每个学科都有不同的数组。实际上,您的方法是错误的,因为您打算将数据放在一个数组中(这就是您在其中创建 4 列的原因),但是您还为所有学科初始化了单独的数组。如果每个学科都有不同的标识号,请删除所有数组并只保留一个数组。
标签: c# arrays class object case