使用LINQ从字典中选择的键数组

本文关键字:数组 选择 LINQ 字典 使用 | 更新日期: 2023-09-27 17:58:37

我对LINQ很陌生,希望确保我正确使用了它。我有一本主机名作为关键字的字典,以及上次联系它们的值。我想列出在一定时间内联系过的所有主持人。我的第一种方法是编写foreach循环,检查每对的值,并生成一个通过检查的名称数组。但后来我发现LINQ有一种更优雅的方法可以做到这一点。

const int HOST_POLL_INTERVAL = 60;
const int INTERVAL_EPSILON = 5;
Dictionary<string, DateTime> _hosts = new Dictionary<string, DateTime>();
bool IsHostCurrent(DateTime lastContact)
{
    return (DateTime.Now - lastContact).TotalSeconds < HOST_POLL_INTERVAL + INTERVAL_EPSILON;
}
public IEnumerable<string> GetHostList()
{
    return _hosts.Where(kvp => IsHostCurrent(kvp.Value)).Select(kvp => kvp.Key);
}

在我能够将其放入调试器并尝试之前,我在开发中还有很长的路要走,但我想确保我走在正确的轨道上。它编译了,但这只会给我很大的信心。在这种情况下,这是使用LINQ的正确方法吗?

编辑:添加了"代码审查"建议。谢谢大家!

使用LINQ从字典中选择的键数组

据我所见,它看起来是正确的语法,它会给你想要的东西,然而,你最好只返回IEnumerable集合,因为你以后可以做更多的事情,但这实际上只是一个风格问题。

编辑

我在一个简单的控制台应用程序中用一些种子数据运行了这段代码,效果很好。因此,简单地回答您的问题,是的,这是在这种情况下实现linq表达式的正确语法。