当我不知道上限值时,如何在使用前正确初始化此数组?

时间:2011-04-07 22:33:15

标签: c# arrays initialization nullreferenceexception

我有以下代码段来处理来自xml文件的<Test></Test>个节点中的值:

var tests = new ServicesTests();
var testcase = new TestData();

var x = 0;
foreach (XPathNavigator test in Service.Select("Testname"))
{
    testcase.Testname[x] = test.Value;
    x++;
}
tests.ServiceTests.Add(testcase);

对象在这里声明:

public class ServicesTests
{
    public List<TestData> ServiceTests = new List<TestData>();
}

public class TestData
{
    ...
    public string[] Testname { get; set; }
}

现在,在尝试设置数组时,我收到一个空值引用异常。我理解为什么,但我不确定初始化它的正确方法是什么,因为我无法知道可以有多少值。我读过的所有例子似乎都假设知道了......

有关如何正确完成此事的任何建议?

由于

编辑:我更新了以前添加的一些代码,因为使用列表仍会返回空引用错误。

5 个答案:

答案 0 :(得分:4)

如果您需要可扩展阵列,则需要编写代码来管理其大小并根据需要进行扩展,否则您可以使用List<string>代替并在完成添加后将其转换为数组使用ToArray()

的项目

答案 1 :(得分:2)

上述好答案的例子。

List<string> list = new List<string>();
foreach (XPathNavigator test in Service.Select("Testname"))
{
    list.Add(test.Value);
}
var arrayIfYouStillNeedOne = list.ToArray();

答案 2 :(得分:1)

您可能希望使用通用List<string>。您可以使用其Add方法将内容放入其中。如果您在完成所有操作后需要一个数组,则可以使用myList.ToArray()进行转换。

答案 3 :(得分:0)

使用List集合,可以在添加值时动态调整大小,然后根据需要将List转换为数组。

e.g。

var list = new List<string>();
foreach (XPathNavigator test in Service.Select("Testname"))
{
    list.Add(test.Value);
}

// If you need to get the values as an array

string[] array = list.ToArray();

答案 4 :(得分:0)

您可以使用LINQ:

在一行中执行此操作
testcase.TestName = Service.Select("Testname").Select(x => x.Value).ToArray();

您甚至不需要知道数组的大小。