簡體   English   中英

使用“收益”時如何返回空行?

[英]How do I return an empty row when using “yield”?

我有以下使用yield生成集合的代碼:

public IEnumerable<Comment> GetComments(
    IEnumerable<ContentItem> commentContentItems)
{

    foreach (var commentContentItem in commentContentItems)
    {
        var Comment = new Comment
            {
                CommentCreatedByName = commentContentItem.InitiatorName,
                CommentCreatedByID = commentContentItem.CreatedByID,
                ContentItemID = commentContentItem.ContentItemID,
                CommentDate = commentContentItem.CreatedDate
            };

        yield return Comment;
    }
}

我想開始檢查是否刪除了某個項目,如果刪除,則以不會將已刪除的項目添加到集合中的方式產生。

我知道我可以使用linq減少這樣的集合:

foreach (var commentContentItem in commentContentItems.Where(x => !x.Deleted))

但是為了爭辯, 假設在收益率更高的情況下,如何使用yield來做到這一點?

例如:

if (commentContentItem.Deleted)
{
    yield return null;
}

我是否知道您只是不想在結果中刪除項目? 那就是在這種情況下不要yield return

if (!commentContentItem.Deleted)
    yield return Comment;

我建議您使用“ Select此處”,它更簡單

public IEnumerable<Comment> GetComments(
    IEnumerable<ContentItem> commentContentItems)
{
    return commentContentItems.Where(x=>!x.IsDeleted).Select(x=>new new Comment
            {
                CommentCreatedByName = x.InitiatorName,
                CommentCreatedByID = x.CreatedByID,
                ContentItemID = x.ContentItemID,
                CommentDate = x.CreatedDate
            });
}

它會一樣工作,看起來更干凈。 它將完成該工作並返回不包含已刪除項目的IEnumerable。

我認為這是一個XY問題,改進解決方案是更好的主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM