0

我收到以下错误:

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

4

3 回答 3

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);
}
于 2013-05-21T08:42:52.967 回答
1

错误发生在这里

[TestMethod]
public void TestDecreaseTutorArea()
{
    HelpWith info = new HelpWith();
    info.Subcategories[0] = 1; <<<<<<<<
}

因为info.Subcategoriesnull。要解决此问题,请添加一个构造函数,例如

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];
    }
}

而且您可能希望使用 aList<int>而不是 ,int[]因为列表是一个动态数组,它的大小可以增长和缩小(这意味着您不必提供初始大小,因为您需要使用int[])。

于 2013-05-21T08:43:23.103 回答
0

您需要初始化数组 - 在构造函数中或在创建对象之后:

    HelpWith info = new HelpWith();
    info.Subcategories = new int[20];
    info.Subcategories[0] = 1;
    info.UserId = 14;

系统如何知道这些阵列应该有多大?

(或者,考虑使用不同的数据类型,例如List<int>,如果您不想管理数组的长度 - 但您仍然需要初始化它们)

于 2013-05-21T08:43:46.557 回答