我收到以下错误:
System.NullReferenceException:未将对象引用设置为对象的实例。
当我尝试运行此单元测试时:
[TestMethod]
public void TestDecreaseTutorArea()
{
HelpWith info = new HelpWith();
info.Subcategories[0] = 1;
info.UserId = 14;
TutorService tutorService = new TutorService();
tutorService.DecreaseTutorArea(info);
}
HelpWith
类看起来像这样:
public class HelpWith
{
public int UserId { get; set; }
public int[] Categories { get; set; }
public int[] Subcategories { get; set; }
}
有谁知道我做错了什么?在我看来,我很清楚info-Subcategories
是什么。
答案 0 :(得分:3)
您尚未将阵列初始化为任何大小。而您正在尝试访问元素
info.Subcategories[0] = 1;
这就是你得到例外的原因。
在使用或构造函数之前将它们初始化为某种大小。
public void TestDecreaseTutorArea()
{
HelpWith info = new HelpWith();
info.SubCategories = new int[10]; //here
info.Subcategories[0] = 1;
info.UserId = 14;
TutorService tutorService = new TutorService();
tutorService.DecreaseTutorArea(info);
}
或者在类构造函数中:
public class HelpWith
{
public int UserId { get; set; }
public int[] Categories { get; set; }
public int[] Subcategories { get; set; }
//constructor
public HelpWith()
{
this(10,10);
}
public HelpWith(int CategorySize, int SubCategorySize)
{
Categories = new int[CategorySize]; //some size
SubCategories = new int[SubCategorySize];
}
}
如果您事先不知道数组的大小,请使用List<int>
,但请记住在构造函数中初始化它,如:
public class HelpWith
{
public int UserId { get; set; }
public List<int> Categories { get; set; }
public List<int> Subcategories { get; set; }
//constructor
public HelpWith()
{
Categories = new List<int>();
Subcategories = new List<int>();
}
}
然后使用它:
[TestMethod]
public void TestDecreaseTutorArea()
{
HelpWith info = new HelpWith();
info.Subcategories.Add(1);
info.UserId = 14;
TutorService tutorService = new TutorService();
tutorService.DecreaseTutorArea(info);
}
答案 1 :(得分:1)
错误发生在这里
[TestMethod]
public void TestDecreaseTutorArea()
{
HelpWith info = new HelpWith();
info.Subcategories[0] = 1; <<<<<<<<
}
因为info.Subcategories
是null
。要修复此问题,请添加类似
public class HelpWith
{
public int UserId { get; set; }
public int[] Categories { get; set; }
public int[] Subcategories { get; set; }
HelpWith()
{
Categories = new int[5];
Subcategories = new int[5];
}
}
你可能想要使用List<int>
而不是int[]
,因为列表是动态数组,它可以增大和缩小(意味着你不必提供初始值)大小,正如您需要使用int[]
)。
答案 2 :(得分:0)
您需要在构造函数中或在创建对象之后初始化数组:
HelpWith info = new HelpWith();
info.Subcategories = new int[20];
info.Subcategories[0] = 1;
info.UserId = 14;
系统还有什么意思才能知道这些数组应该有多大?
(或者,考虑使用不同的数据类型,例如List<int>
,如果您不想管理数组的长度 - 但仍需要初始化它们)