当我不知道数组的上限时,如何在使用前正确地初始化这个数组?

本文关键字:数组 正确地 初始化 我不知道 | 更新日期: 2023-09-27 17:49:15

我有以下代码部分作用于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; }
}

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

有什么好的建议吗?

感谢

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

当我不知道数组的上限时,如何在使用前正确地初始化这个数组?

如果你需要一个可扩展的数组,你需要编写代码来管理它的大小,并根据需要增长它,或者你可以使用List<string>代替,并在你完成添加项目时将其转换为一个数组使用ToArray()

以上好答案的例子。

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

您可能希望使用通用的List<string>。您可以使用它的Add方法将内容放入其中。如果您需要一个数组,那么很容易使用myList.ToArray()进行转换。

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

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();

你可以用LINQ:

一行完成
testcase.TestName = Service.Select("Testname").Select(x => x.Value).ToArray();

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