C# 无法通过委托传递错误

C# 无法通过委托传递错误,c#,.net,C#,.net,无法通过委托传递错误 错误: 代码: 更新: 听起来onError是空的 改为: if (onError != null) onError(ex); 或者,如果调用方未能传入委托,则执行其他一些操作。执行与第一次调用操作时相同的空检查: catch (Exception ex) { if (onError != null) onError(ex); return; } 如果要避免空检查,请将虚拟处理程序附加到方法顶部的操作委托: onError

无法通过委托传递错误

错误:

代码:

更新:

听起来onError是空的

改为:

if (onError != null) onError(ex);

或者,如果调用方未能传入委托,则执行其他一些操作。

执行与第一次调用操作时相同的空检查:

catch (Exception ex)
 { 
    if (onError != null)
        onError(ex); 
   return;    
 }
如果要避免空检查,请将虚拟处理程序附加到方法顶部的操作委托:

onError += (e) => {};

是的,但是为什么?如何修复它?当您调用GetRssItems时,请确保传入一个委托。并在尝试调用它之前检查空值。@JonB为什么?委托似乎是可选参数。作为可选参数,调用方可能提供值,也可能不提供值。如果未提供任何值,则在本例中使用默认值null。当您尝试调用onError时,您假定它是非null的。如果调用者没有提供值,或者调用者实际传入null,则该值将为null。@JonB您说过一定要传入委托-对于可选参数,这不是真的。检查是否为空-是。传入-不传入您传入的是空onError;你应该做一个类似的空检查,就像您在代码前面所做的那样。编辑:也要考虑它是否为空,以抛出错误,而不是默默地失败,除非这是你的问题,你有306个问题,在某种程度上看起来相当像一个编译或运行时错误。我想说,到现在为止,您应该能够自己调试这些基本问题,我们不是您的调试器。错误很明显,onError为null,如果在该行上放置断点并检查变量,就会看到该错误。它是空的,因为调用代码显然传递了空。@CodeCaster我尊重你的+++,但不要做一个坏人…:我不是想作恶,比如说,我没有杀过任何小狗,至少据我所知是这样,但我强烈建议大家拿出一些研究成果来回答你们的问题。这样,您不仅会发现人们更乐于助人,而且您甚至可以自己解决此类问题。@Peretz如果您的代码中出现了引发XmlException的问题,那么在该代码的try/catch处理程序中,当您尝试报告第一个错误时,您又抛出了第二个错误NullReferenceException。您现在看到的问题可能存在于var feeds=SyndicationFeed.Loadresponse中,这是一个独立的问题,完全不同于这个问题的开始。这里的两个答案与你原来的问号一是正确的。开始调试您的XML加载问题,而不是错误处理,如果您对此有问题,请发布一个包含相关信息的新问题。谢谢!你能看看我的顶级方法,并建议我在哪里可以应用你的解决方案吗?谢谢!我已经阅读了这篇很酷的文章,并将exception=>{var I=exception.Message;}放在顶级方法中,它工作得很好。
catch (Exception ex)
 { 
    if (onError != null)
        onError(ex); 
   return;    
 }
onError += (e) => {};