gpt4 book ai didi

c# - 防止引发异常

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:20 25 4
gpt4 key购买 nike

我正在使用下面的代码解析以下 html:

 var exroom = (from roomItem in
doc.DocumentNode.SelectNodes("//div[@class='dias']//h2")

from s in roomItem.NextSibling.NextSibling.SelectNodes(".//label")

let rName = roomItem.InnerText.CleanInnerText()

select new
{
roomID = rName,
Pers = 2,
Currency = "EUR",
rateName = s.InnerText.CleanInnerText(),
roomName = rName,
Price = PriceHelper.Convert(PriceRegEx.Match(s.Attributes["precio"].Value.CleanInnerText()).Groups["price"].Value)
}
).ToArray();

但是当我解析没有上面标签的html内容时,它会引发异常,如何防止在解析时引发异常并为exroom数组返回0?比如我在 dias 类中没有任何元素。

最佳答案

分三步处理。

  • 选择“dias”类的元素
  • 检查选择的变量,只有当它不同于null时才继续处理
  • 您的其余处理

因为在 exroom 变量中有匿名类型对象数组,所以创建空数组可能很棘手。

我建议将该类型包装在某个类中:

public class RoomItem {
public string roomID { get; set; }
public string Pers { get; set; }
...
}

然后选择 exroom 变量看起来像:

var diasElements = doc.DocumentNode.SelectNodes("//div[@class='dias']//h2");
var exroom = new RoomItem[] { };
if(null != diasElements) {
exroom = (from roomItem in diasElements
from s in roomItem.NextSibling.NextSibling.SelectNodes(".//label")
let rName = roomItem.InnerText.CleanInnerText()
select new RoomItem
{
roomID = rName,
Pers = 2,
Currency = "EUR",
rateName = s.InnerText.CleanInnerText(),
roomName = rName,
Price =
PriceHelper.Convert(
PriceRegEx.Match(s.Attributes["precio"].Value.CleanInnerText()).Groups["price"].Value)
}
).ToArray()
}

从您的示例代码看来,类为“dias”的空元素列表应该会导致某种形式的错误消息(可能抛出/捕获异常,或调整 BookingEngineResponse 以传递有关空 dias 集合的信息)。

编辑:完整代码示例后答案得到澄清。

关于c# - 防止引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com