我已经定义了我的课程:
public class Host
{
public string Name;
}
然后是一个强类型字典:
Dictionary<string, Host> HostsTable;
然后我尝试比较一个值:
if (HostsTable.Values.Where(s => s.Name == "myhostname") != null) { doSomething }
问题是,找不到任何东西,即使我确定该项目在列表中。我做错了什么?
答案 0 :(得分:5)
Where()
会返回另一个IEnumerable<Host>
,因此您对null的测试不会检查是否存在匹配项。
我认为这就是你要做的事情:
if(HostsTable.Values.Any(s => s.Name == "myhostname")) { doSomething }
如果有任何项目符合条件,则 Any()
会返回true
。
答案 1 :(得分:1)
试试这个:
if (HostsTable.Values.Any(s => s.Name == "myhostname")) { doSomething }
Where
运算符根据谓词过滤序列。
Any
运算符确定序列的任何元素是否满足条件。
请参阅MSDN上的standard linq operators文档。
答案 2 :(得分:1)
问题也可能在你的字符串比较中:
if(HostsTable.Values.Any(s => s.Name.Equals("myhostname", StringComparison.OrdinalIgnoreCase))) { doSomething }