[英]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.