C#如何返回自定义Values类数组并在其他函数中调用元素属性
需要修改的核心问题
- 方法返回值类型错误:原方法定义的返回值是单个
Values对象,你需要返回数组,所以要把方法签名改为static Values[] RetrieveXML(string XMLFile) - 返回语句语法错误:原代码
return _Values[];是错误写法,直接返回数组变量名即可,改为return _Values;
可选优化(推荐补充)
- 可以使用
int.TryParse替换int.Parse,避免XML中nombre属性值非法时抛出未处理异常 - 每次调用
GetAttribute后可以增加空值判断,避免XML节点缺失属性时赋值为null带来后续调用风险 - 可以判断
ReadToFollowing的返回值,避免XML节点缺失时后续逻辑出错
修改后完整代码
static Values[] RetrieveXML(string XMLFile) { using var reader = XmlReader.Create(XMLFile); reader.ReadToFollowing("ticket"); reader.ReadToFollowing("lignes"); string nombre = reader.GetAttribute("nombre"); // 这里也可以换成int.TryParse做更安全的类型转换 int ligne = int.Parse(nombre); Values[] _Values = new Values[ligne]; for(int i=0; i<ligne; i++) { _Values[i] = new Values(); reader.ReadToFollowing("article"); _Values[i].code = reader.GetAttribute("code"); _Values[i].qty = reader.GetAttribute("quantite"); _Values[i].net_price = reader.GetAttribute("net"); _Values[i].net_ht_price = reader.GetAttribute("net_ht"); _Values[i].tva = reader.GetAttribute("taxes"); _Values[i].num = reader.GetAttribute("numero"); _Values[i].valeur = reader.GetAttribute("base_ht"); _Values[i].remise = reader.GetAttribute("valeur_remise"); reader.ReadToFollowing("libelle"); _Values[i].libelle = reader.ReadElementContentAsString(); Console.WriteLine("-----------Using XMLToOrderLine--------------"); Console.WriteLine(_Values[i].code); Console.WriteLine(_Values[i].valeur); } return _Values; } public class Values { public string code; public string qty; public string remise; public string valeur; public string tva; public string libelle; public string num; public string net_ht_price; public string net_price; }
调用示例
// 调用方法获取数组 Values[] resultArr = RetrieveXML("你的XML文件路径"); // 按照你需要的形式读取属性,数组下标从0开始 var targetCode = resultArr[1].code;
内容的提问来源于stack exchange,提问作者Gbn
相关产品推荐
相关产品推荐

