gpt4 book ai didi

c# - 将 Try-Catch block 添加到 XAML 代码

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

我有以下代码,需要添加一个 try-catch-block,因为例如如果提供的字符串错误,则转换为整数可能无法正常工作。问题只在极少数情况下出现,但我当然希望避免崩溃。

private async Task<List<MyItem>> ParseFeed(string text)
{
XNamespace ns = "http://mynamespace/";
return await Task.Run(() =>
{
var xdoc = XDocument.Parse(text);
return (from XElement item in xdoc.Descendants("item")
select new MyItem
{
Subject = (string)item.Element(ns + "Subject"),
CreationDate = (System.DateTime)System.DateTime.Parse((string)item.Element(ns + "CreationDate")),
ItemID = (int)item.Element(ns + "ItemID")
}).ToList();
});
}

我已经在几个地方尝试过 try-catch 但我没有找到正确的 :-( 我应该在哪里添加它?如果“ItemID”不是整数,我想跳过这个项目并处理所有其他的。那行得通吗?非常感谢!

最佳答案

简短的回答是您不能按照您描述的方式使用 try/catch。

你有两个选择:

首先,您可以放弃 LINQ 并使用标准 foreachlist.Add()并使用 try/catch。

第二种方法是提取 int转换成一个单独的方法来执行 try/catch,例如,返回一个指示成功和值的元组,尽管这可以通过使用 Option<int> 来大大简化。类型,比如我自己提供的Succinc<T> library .它支持提供一个值或不提供值:

private async Task<List<MyItem>> ParseFeed(string text)
{
XNamespace ns = "http://mynamespace/";
return await Task.Run(() =>
{
var xdoc = XDocument.Parse(text);
return (from XElement item in xdoc.Descendants("item")
let possibleItemID = item.Element(ns + "ItemID").ParseInt()
where possibleItemID.HasValue
select new MyItem
{
Subject = (string)item.Element(ns + "Subject"),
CreationDate = (System.DateTime)System.DateTime.Parse((string)item.Element(ns + "CreationDate")),
ItemID = possibleItemID.Value
}).ToList();
});
}

关于c# - 将 Try-Catch block 添加到 XAML 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34773589/

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