如何在Dictionary的TryGetValue方法中处理System.InvalidOperationExcpetion

时间:2016-10-03 14:26:19

标签: c# linq dictionary exception

我这样做是为了查找字典中的特定键,我想找到相同的行id_d,它真的很适用于真正存在的键,但是当键没有&时它会抛出异常#39; t匹配参数值中的查询条件。

if(sentences.TryGetvalue(values = (from keys in sentences where keys.key.id_d == rows.id_d selesck keys.Key).First(), out listOf)) 

你知道我怎么能解决这个问题,我的意思是,只是从值中避免那些空引用并继续而不被异常停止。

一个例子是这样的:

if(sentences.TryGetValue(values = (from keys in sentences where keys.key.id_d == rows.id_d selesck keys.Key).First(), out listOf))
{

     //do whatever  
}
else 
{
   //if the 'value' query doesn't match the criteria, don't do anything    
}

1 个答案:

答案 0 :(得分:0)

如果TKey实际上不是您要用来查找值的关键字,那么您还在使用字典的原因尚不清楚 - 您错过了常量时间查找。我只能假设你在其他地方使用它。

如果要根据键谓词查找值,只需选择值(而不是键)并返回FirstOrDefault - TryGetValue不是必需的。在未找到匹配项的情况下,这将返回默认值(可能null,除非TValue是值类型):

var result = 
    (from pair in sentences 
    where pair.Key.id_d == rows.id_d 
    select pair.Value).FirstOrDefault();

如果您在整个过程中使用方法语法,这可能会更好:

var result = sentences
    .Where(x => x.Key == rows.id_d)
    .Select(x => x.Value)
    .FirstOrDefault();