我正在
'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.dll
当我运行我的代码时,everthing似乎很好,我一直无法找到错误。这是我的班级路径我的获取/设置
foreach (Tran transaction in transactions)
{
Account sAcc = items[transaction.ID1];//getting error here
Account dAcc = items[transaction.ID2];
decimal tempResult = sAcc.Money - transaction.Amount;
foreach (char s in sAcc.BorP)
Console.WriteLine(s);
这是我的get / set class
public class Tran
{
public int ID1 { get; set; }
public int ID2 { get; set; }
public decimal Amount { get; set; }
}
它之前运行,我运行了一些测试,我不断收到此错误,不知道是什么原因导致int。谢谢你的帮助
答案 0 :(得分:0)
您可以使用字典的TryGetValue
方法。
以下是使用
的示例代码object result; // Un-Initialized instance result
myCollection.TryGetValue("Test", out result); // If the key exists the method will out the value
从另一个SO帖子中抓取。
来自MSDN的Dictionary.TryGetValue方法条目:
此方法结合了ContainsKey方法的功能 Item属性。
如果未找到密钥,则value参数将获得相应的参数 值类型TValue的默认值;例如,0(零)表示 整数类型,布尔类型为false,引用类型为null。
如果您的代码经常尝试访问,请使用TryGetValue方法 不在字典中的键。使用这种方法更多 比捕获Item抛出的KeyNotFoundException更有效 属性。
此方法接近O(1)操作。
此帖子中还引用了Indexer
vs TryGetValue
What is more efficient: Dictionary TryGetValue or ContainsKey+Item?
答案 1 :(得分:-2)
您遇到的问题是您尝试从items数组中读取的项目不存在。
使用
if (items.ContainsKey(transaction.ID1) && items.ContainsKey(transaction.ID2))
{
// Your code.
} else {
// Signal an error.
}
或者,如果您在事务不存在时要使用默认帐户类,则可以使用此类内容。
if (!items.TryGetValue(transaction.ID1, out sAcc))
items.Add(transaction.ID1, sAcc = new Account);
if (!items.TryGetValue(transaction.ID2, out dAcc))
items.Add(transaction.ID2, dAcc = new Account);
// Your code.
否则,如果事务ID:s应始终在项目中,则代码的问题可能超出了您在此处共享的代码段。我会检查ID:你正在试图查找并进行健全性检查。