我有以下代码段来处理来自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; }
}
现在,在尝试设置数组时,我收到一个空值引用异常。我理解为什么,但我不确定初始化它的正确方法是什么,因为我无法知道可以有多少值。我读过的所有例子似乎都假设知道了......
有关如何正确完成此事的任何建议?
由于
编辑:我更新了以前添加的一些代码,因为使用列表仍会返回空引用错误。
答案 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();
您甚至不需要知道数组的大小。