gpt4 book ai didi

c# - 返回类型为 IEnumerable 的匿名方法

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:21 25 4
gpt4 key购买 nike

我正在为我的网站设计一个搜索引擎。读取搜索键并返回数据。

我的测试代码:

public string ErrorMessage { get; set; }

private IEnumerable<TopicViewModels> GetTopics(List<TopicViewModels> topics)
{
foreach (var item in topics)
{
yield return item;
}
}

public async Task<IEnumerable<TopicViewModels>> Search(string key)
{
try
{
using (var db = new MyDbContext()) //EF
{
var topics = await db.Topics.Where(x => x.Title.Contains(key)).ToListAsync();
if (topics != null && topics.Count > 0)
{
return await Task.Run(() => GetTopics(topics));
}
ErrorMessage = "No topic was found.";
}
}
catch (Exception e)
{
ErrorMessage = e.Message;
}
return null;
}

我正在寻找可以使用的解决方案 GetTopics方法作为匿名方法。无需创建新方法来获取所有主题,因为不再有其他类/方法重用 GetTopics方法。

但我的问题是:yield return不能以匿名方式接受。就像:

var topics = await db.Topics.Where(x => x.Title.Contains(key)).ToListAsync();
topics.ForEach(x =>
{
yield return x;
});

那么,我的问题是:还有其他方法可以做得更好吗?

更新:(基于@EricLippert 评论)

public async Task<IEnumerable<TopicViewModels>> Search(string key)
{
using (var db = new MyDbContext())
{
var topics = await db.Topics.Where(x => x.Title.Contains(key)).ToListAsync();
if (topics != null && topics.Count > 0)
{
foreach (var topic in topics)
{
yield return topic;
}
}
ErrorMessage = "No topic was found.";
yield return null;
}
}

错误语法信息:

The body of 'TopicMaster.Search(string)' cannot be an iterator block because Task<IEnumerable<TopicViewModels>> is not an iterator interface type

更新 2:

public async Task<IEnumerable<TopicViewModels>> Search(string key)
{
var topics = await new MyDbContext().Topics.Where(x => x.Title.Contains(key)).ToListAsync();
return topics != null && topics.Count > 0 ? topics : null;
}

最佳答案

埃里克是这样说的:

if (topics != null && topics.Count > 0)
{
return topics;
}

具体来说,List<T>工具 IEnumerable<T> , 所以你可以只返回列表。不需要迭代器 block 、匿名委托(delegate)或 Task.Run , 或 foreach/ForEach .

关于c# - 返回类型为 IEnumerable<T> 的匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34311986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com