检查 IEnumerable(Of T) 中是否没有元素 - Linq 元素和量词运算符

发布于 2024-07-22 00:58:07 字数 553 浏览 5 评论 0原文

对于我的函数,

IEnumerable<CallbackListRecord> LoadOpenListToProcess(CallbackSearchParams usp);

当序列不包含元素(应该如此)时,此行错误

CallbackListRecord nextRecord = CallbackSearch.LoadOpenListToProcess(p).First();

我已将其更改为以下

CallbackListRecord nextRecord = null;
IEnumerable<CallbackListRecord> nextRecords = CallbackSearch.LoadOpenListToProcess(p);
if (nextRecords.Any())
{
    nextRecord = nextRecords.First();
}

是否有更好、更简单或更优雅的方法来确定 IEnumerable 序列是否没有元素?

For my function

IEnumerable<CallbackListRecord> LoadOpenListToProcess(CallbackSearchParams usp);

This line errors when the sequence contains no elements (as it should)

CallbackListRecord nextRecord = CallbackSearch.LoadOpenListToProcess(p).First();

I have changed it to the following

CallbackListRecord nextRecord = null;
IEnumerable<CallbackListRecord> nextRecords = CallbackSearch.LoadOpenListToProcess(p);
if (nextRecords.Any())
{
    nextRecord = nextRecords.First();
}

Are there better, easier or more elegant ways to determine if the IEnumerable sequence has no elements?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

陈甜 2024-07-29 00:58:08

您可以将代码缩短为以下

var nextrecord = CallbackSearch.LoadOpenListToProcess(p).FirstOrDefault();

nextrecord 将包含第一个元素(如果有一个元素)或 null(如果集合为空)。

You can shorten the code to the following

var nextrecord = CallbackSearch.LoadOpenListToProcess(p).FirstOrDefault();

nextrecord will either contain the First element if there was one or null if the collection was empty.

友谊不毕业 2024-07-29 00:58:08

您可以添加这样的扩展方法:

public static class Extensions
{
    public static bool HasElements<T>(this IEnumerable<T> collection)
    {
        foreach (T t in collection)
            return true;

        return false;
    }
}

You could add an extension method like this:

public static class Extensions
{
    public static bool HasElements<T>(this IEnumerable<T> collection)
    {
        foreach (T t in collection)
            return true;

        return false;
    }
}
極樂鬼 2024-07-29 00:58:08

如果您预计序列中可能存在空值,您可以自己处理枚举器。

var enumerator = CallbackSearch.LoadOpenListToProcess(p).GetEnumerator();
if (enumerator.MoveNext()) {
  var item = enumerator.Current;
  ...
}

If you are anticipating that there could be null values in the sequence, you could handle the enumerator yourself.

var enumerator = CallbackSearch.LoadOpenListToProcess(p).GetEnumerator();
if (enumerator.MoveNext()) {
  var item = enumerator.Current;
  ...
}
一生独一 2024-07-29 00:58:07

您应该尽量避免枚举它超过必要的次数(即使短路,如 FirstAny) - 怎么样:

var nextRecord = CallbackSearch.LoadOpenListToProcess(p).FirstOrDefault();
if(nextRecord != null) {
    // process it...
}

这对于类来说效果很好(因为您可以只需将引用与 null 进行比较)。

You should try to avoid enumerating it more times than necessary (even if short-circuited, like First and Any) - how about:

var nextRecord = CallbackSearch.LoadOpenListToProcess(p).FirstOrDefault();
if(nextRecord != null) {
    // process it...
}

This works well with classes (since you can just compare the reference to null).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文