我有以下编码
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是否使用多线程以便在另一个线程中抛出异常?也许我在这里也犯了一个愚蠢的错误而且看不到它:(。
感谢您的帮助!
答案 0 :(得分:0)
我知道这不是一个答案,而是一些额外的调试步骤,但如果您试图捕获常规类型“Exception”而不是IOE,它是否会改变任何内容?这可能有助于隔离方法是否真正抛出IOE,或者它的失败是否在堆栈中的其他位置生成IOE。另外 - 假设这个方法不在main()中 - 是否有办法在try / catch中包含对它的调用,然后检查调用流中该点的行为?
道歉,因为我对SilverLight开发环境知之甚少,所以希望这些建议并不遥远。
答案 1 :(得分:0)
源序列为空时发生InvalidOperationException异常。 参考http://msdn.microsoft.com/en-us/library/bb291976.aspx
检查天气“属性”或“方法”不为空。
出于兴趣,为什么不使用FirstOrDefault?