C# 如果我没有';我不知道上限值是多少?

C# 如果我没有';我不知道上限值是多少?,c#,arrays,initialization,nullreferenceexception,C#,Arrays,Initialization,Nullreferenceexception,我有以下代码部分作用于xml文件中节点中的值: 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); 此处声

我有以下代码部分作用于xml文件中
节点中的值:

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; }
}
公共类服务测试
{
public List ServiceTests=新列表();
}
公共类测试数据
{
...
公共字符串[]Testname{get;set;}
}
现在,我在尝试设置数组时收到一个空值引用异常。我理解为什么,但我不确定初始化它的正确方法是什么,因为我无法知道可以有多少个值。我读过的所有例子似乎都假设我知道这一点

关于如何正确完成这项工作,有什么建议吗

谢谢


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

您可能希望使用通用的
列表。您可以使用它的
Add
方法将内容放入其中。如果你需要一个数组,那么当你需要一个可扩展的数组时,你需要编写代码来管理它的大小并根据需要进行扩展,或者你可以使用一个
列表来代替它,当你使用
ToArray()添加完项时,你可以将它转换成一个数组

以上正确答案的示例

List<string> list = new List<string>();
foreach (XPathNavigator test in Service.Select("Testname"))
{
    list.Add(test.Value);
}
var arrayIfYouStillNeedOne = list.ToArray();
List List=新列表();
foreach(XPathNavigator服务中的测试。选择(“Testname”))
{
列表.添加(测试值);
}
var arrayIfYouStillNeedOne=list.ToArray();

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

e、 g

var list=newlist();
foreach(XPathNavigator服务中的测试。选择(“Testname”))
{
列表.添加(测试值);
}
//如果需要以数组形式获取值
string[]数组=list.ToArray();

您可以使用LINQ在一行中完成此操作:

testcase.TestName = Service.Select("Testname").Select(x => x.Value).ToArray();

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

实际上,您不需要linq,因为List有自己的ToArray()实例方法它仍然返回testcase.Testname的空引用。不确定现在的问题是什么。哦,好吧,我已经习惯了Ienumerables上的linq,我完全忘记了这也是一个列表方法!你需要创建一个
new
List。每个对象都以空开头。例如
public List Testname=new List()
或者,如果您想使用某个属性,则需要将其充实到延迟加载,或者在其他地方对其进行初始化。
testcase.TestName = Service.Select("Testname").Select(x => x.Value).ToArray();