我对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的正确方法吗?
编辑:添加&#34;代码审核&#34;建议。谢谢大家!
答案 0 :(得分:1)
从我看到它看起来像正确的语法,它会给你你想要的东西,但是,你可能最好只返回IEnumerable集合,因为你可以在以后做更多,但这是真的只是一个风格问题。
修改强>
我在一个带有一些种子数据的简单控制台应用程序中运行此代码,它运行良好。所以简单地回答你的问题,是的,这是实现linq表达式的正确语法。