C# 将数组传递给存储过程时的Null引用
我得到以下错误: System.NullReferenceException:对象引用未设置为对象的实例 当我尝试运行此单元测试时:C# 将数组传递给存储过程时的Null引用,c#,sql,unit-testing,C#,Sql,Unit Testing,我得到以下错误: System.NullReferenceException:对象引用未设置为对象的实例 当我尝试运行此单元测试时: [TestMethod] public void TestDecreaseTutorArea() { HelpWith info = new HelpWith(); info.Subcategories[0] = 1; info.UserId = 14; TutorServi
[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] = 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
,但请记住在构造函数中初始化它,如:
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>();
}
}
您尚未将数组初始化为任何大小。您正在尝试访问该元素
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
,但请记住在构造函数中初始化它,如:
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[0] = 1; <<<<<<<<
}
您可能希望使用列表
而不是int[]
,因为列表是一个动态数组,它的大小可以增减(这意味着您不必提供初始大小,因为您需要使用int[]
)
[TestMethod]
public void TestDecreaseTutorArea()
{
HelpWith info = new HelpWith();
info.Subcategories[0] = 1; <<<<<<<<
}
您可能希望使用列表
而不是int[]
,因为列表是一个动态数组,它的大小可以增减(这意味着您不必提供初始大小,因为您需要使用int[]
).您需要在构造函数中或在创建对象后初始化数组:
HelpWith info = new HelpWith();
info.Subcategories = new int[20];
info.Subcategories[0] = 1;
info.UserId = 14;
否则,系统如何知道这些阵列应该有多大
(可选地,考虑使用不同的数据类型,例如,如果不想管理数组的长度,但仍然需要初始化它们)
,您需要初始化数组——在构造函数中或创建对象之后:
HelpWith info = new HelpWith();
info.Subcategories = new int[20];
info.Subcategories[0] = 1;
info.UserId = 14;
否则,系统如何知道这些阵列应该有多大
(可选地,考虑使用不同的数据类型,例如,如果不想管理数组的长度,但仍然需要初始化它们)
<代码>帮助< /COD>构造函数是什么样的?添加异常处理将有助于您。现在看来对象的构造失败了。我不是用C语言写的,但我想知道你是否得到了;并设置;是两个有效整数。如果没有,那么对象的构造可能会失败。HelpWith
构造函数是什么样子的?添加异常处理应该会对您有所帮助。现在看来对象的构造失败了。我不是用C语言写的,但我想知道你是否得到了;并设置;是两个有效整数。如果没有,那么对象的构造可能会失败。哦。。。你说得对!隐马尔可夫模型。。这带来了一个问题,我无法事先知道它的大小。。。我已经将Public int[]子类别更改为Public List子类别(据我所知,列表不需要特定的长度),但仍然会出现相同的错误。。。即使我也更改了信息子类别[0]=1;至信息子类别。添加(1)@用户2392980,然后使用List
而不是ArrayI have,我只是在编写响应时过早地按了enter键:P@user2392980,再次在构造函数中初始化列表,查看更新的答案在重新加载页面后,我看到了您的更新答案。现在可以了,谢谢:)哦。。。你说得对!隐马尔可夫模型。。这带来了一个问题,我无法事先知道它的大小。。。我已经将Public int[]子类别更改为Public List子类别(据我所知,列表不需要特定的长度),但仍然会出现相同的错误。。。即使我也更改了信息子类别[0]=1;至信息子类别。添加(1)@用户2392980,然后使用List
而不是ArrayI have,我只是在编写响应时过早地按了enter键:P@user2392980,再次在构造函数中初始化列表,查看更新的答案在重新加载页面后,我看到了您的更新答案。现在可以了,谢谢:)