【问题标题】:Null check ObservableCollection before querying it在查询之前对 ObservableCollection 进行空检查
【发布时间】:2011-09-15 16:34:38
【问题描述】:

这段代码是否足够好:

if (MyCollection.Where(p => p.SomeID == idstring).Any())
{
   selectedval = MyCollection.Where(p => p.SomeID == idstring).FirstOrDefault().MyField;
}

我怀疑我做了两次相同的查询:首先是空检查,然后是实际获取数据。

也许有更好的方法来做这类事情?

【问题讨论】:

    标签: c# .net linq code-snippets


    【解决方案1】:

    是的。

    var item = MyCollection.FirstOrDefault(p => p.SomeID == idstring);
    if (item != null)
        selectval = item.MyField;
    

    这避免了重复查询集合,这肯定会在大集合或您的集合执行数据库查询时产生影响。

    【讨论】:

    • 我比你早 12 秒发布了这篇文章 =D
    • 我不知道该说什么。你有没有想过我们是同时写的?这个问题没有太多不同的答案。此外,我很确定我的答案是我发布后的唯一答案:)
    • 哈哈,我只是在逗你。他们几乎是在同一时间发布的。我的答案是我发布后看到的唯一答案,所以可能会有一些延迟。
    • 呵呵。我认为人们更喜欢我的:D
    • 对...除了完全一样的东西(除了您在拨打FirstOrDefault之前先不必要地拨打了Where)...但就像我说的那样,我是在开玩笑。跨度>
    【解决方案2】:

    有。您可以使用 FirstOrDefault 方法,该方法接受一个谓词,如果未找到该项目,则返回 null。

    var result = MyCollection.FirstOrDefault(p => p.SomeID == idstring);
    if( result != null )
    {
        // item was found
    }
    

    【讨论】:

    • 对不起,Ed,我不得不做出这个艰难的选择,所以就跟着人们。非常感谢,+1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多