在try / catch块中忽略InvalidOperationException

时间:2011-12-06 14:22:04

标签: silverlight-4.0 exception-handling

我有以下编码

  try
            {
                var foundCanProperty = properties
                    .First(x => x.Name == "Can" + method.Name);

                var foundOnExecuteMethod = methods
                    .First(x => x.Name == "On" + method.Name);

                var command = new Command(this, foundOnExecuteMethod, foundCanProperty);
                TrySetCommand(foundControl as Control, command);

            }
            catch (InvalidOperationException ex)
            {
                throw new FatalException("Please check if you have provided all 'On' and 'Can' methods/properties for the view" + View.GetType().FullName, ex);
            }

我预计如果methods.First()(在第二个var语句中)抛出InvalidOperationException,我就能捕获它。但似乎并非如此(忽略了catch块,应用程序因引发的异常而终止)。如果我在try块中抛出相同类型的异常,它就会被捕获。 Linq是否使用多线程以便在另一个线程中抛出异常?也许我在这里也犯了一个愚蠢的错误而且看不到它:(。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我知道这不是一个答案,而是一些额外的调试步骤,但如果您试图捕获常规类型“Exception”而不是IOE,它是否会改变任何内容?这可能有助于隔离方法是否真正抛出IOE,或者它的失败是否在堆栈中的其他位置生成IOE。另外 - 假设这个方法不在main()中 - 是否有办法在try / catch中包含对它的调用,然后检查调用流中该点的行为?

道歉,因为我对SilverLight开发环境知之甚少,所以希望这些建议并不遥远。

答案 1 :(得分:0)

源序列为空时发生InvalidOperationException异常。 参考http://msdn.microsoft.com/en-us/library/bb291976.aspx

检查天气“属性”或“方法”不为空。

出于兴趣,为什么不使用FirstOrDefault?