我目前有一个listview和一个包含XML文档的文件夹。我正在使用foreach()循环遍历所有XML文件并相应地将数据加载到listview中。我的问题是,如果in(如果其中一个XML文件不完全有效,包含错误等)并且仍然将数据添加到listview,我如何继续使用foreach()循环?我不是在问如何解析XML或如何将它加载到listview中,我知道该怎么做,而不是如果发生错误就不继续循环。
答案 0 :(得分:5)
你想要:
foreach(var xml in xmls)
{
try
{
//import xml to listview
}
catch (SomeException e)
{
//deal with the exception here
}
}
答案 1 :(得分:1)
将循环的内部内容包装在try ... catch
块中。
e.g。
foreach (var foo in iterableThing) {
try {
DoStuff(foo);
}
catch (AppropriateException) {
// Handle the exception (or ignore it)...
}
catch (SomeOtherException) {
// Handle the exception (or ignore it)...
}
}
答案 2 :(得分:0)
你不会这样做
foreach( loop )
{
try {
}
catch (Exception ex)
{
// all errors caught here, but the loop would continue
}
}
答案 3 :(得分:0)
您可以在try catch块中执行文件处理并处理错误情况。您可以在catch中正常处理错误并继续加载数据。
答案 4 :(得分:0)
我认为你应该这样做:
foreach(var doc in docs)
{
//Make a function to evaluate the doc
if(isValid(doc))
{
//Logging or something
continue;
}
//Add data to listview
}
答案 5 :(得分:0)
如果处理代码抛出异常,则使用try/catch
块。如果您使用if
块检查某个方法的结果,请使用continue
。
答案 6 :(得分:0)
如果您需要更频繁地使用它,或者您只想拥有更优雅的代码,可以使用lambda表达式和委托来为此目的创建新的抽象:
static void SafeForEach<T>(this IEnumerable<T> source, Action<T> op) {
foreach(var el in source) {
try { op(el); }
catch (Exception e) { }
}
}
然后你可以写:
xmls.SafeForEach(xml => {
// Xml processing
});
但是,在预期错误的情况下使用异常不是最佳编程风格。如果您可以编写方法,请说IsValid
如果文档有效则返回true,那么您可以写:
foreach(var xml in xmls.Where(x => x.IsValid)) {
// Xml processing
}