我有一个随机抛出“KeyNotFoundException
”的C#Silverlight应用程序。我不知道找不到什么 key 。这使我想到两个问题:
KeyNotFoundException
是否存储/公开尝试查找的 key ?当我查看documentation时,我没有看到任何暗示此信息可用的信息。 非常感谢你的帮助!
最佳答案
KeyNotFoundException
是由于尝试在不存在键的情况下尝试从具有给定键的字典中获取值而引起的。例如:
var dictionary = new Dictionary<string, string>();
var val = dictionary["mykey"];
您可以查看正在使用字典的所有地方并确定自己的位置。通常的最佳做法是,如果您正在字典中寻找一个可能不存在的值,则可以使用
TryGetValue
。每次都捕获异常是一个更昂贵的操作,并且是不必要的:string val;
if(dictionary.TryGetValue("mykey", out val))
{
//The key was found. The value is in val.
}
else
{
//The key was not present.
}
您可以查看它们
StackTrace
的KeyNotFoundException
属性,以确定问题发生的确切位置。所有异常都具有StackTrace
属性,因此您无需关心全局错误处理程序中的异常类型。例如:private void Application_UnhandledException(object sender,
ApplicationUnhandledExceptionEventArgs e)
{
var stackTrace = e.ExceptionObject.StackTrace;
//Log the stackTrace somewhere.
}
或者,如果您想知道哪种异常类型:
private void Application_UnhandledException(object sender,
ApplicationUnhandledExceptionEventArgs e)
{
if (e.ExceptionObject is KeyNotFoundException)
{
//This was a KeyNotFoundException
}
}