gpt4 book ai didi

c# - 返回类型错误的 Blazor 任务

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

我遇到了错误

Task> __generated__Index.SearchFilms(string)' has the wrong return type

在我下面的代码中,我不知道为什么。有问题的行是

 <BlazoredTypeahead SearchMethod="SearchFilms"

代码:

@page "/"

@using Blazored.Typeahead

<BlazoredTypeahead SearchMethod="SearchFilms"
@bind-Value="SelectedFilm">
<SelectedTemplate>
@context.Title
</SelectedTemplate>
<ResultTemplate>
@context.Title (@context.Year)
</ResultTemplate>
</BlazoredTypeahead>

@if (SelectedFilm != null)
{
<p>Selected Film is: @SelectedFilm.Title</p>
}



@code {

private List<Film> Films;
private Film SelectedFilm;

protected override void OnInitialized()
{
Films = new List<Film> {
new Film("The Matrix", 1999),
new Film("Hackers", 1995),
new Film("War Games", 1983) };
}

private async Task<List<Film>> SearchFilms(string searchText)
{
return await Task.FromResult(Films.Where(x => x.Title.ToLower().Contains(searchText.ToLower())).ToList());
}

class Film
{
public string Title { get; set; }
public int Year { get; set; }

public Film(string title, int year)
{
Title = title;
Year = year;
}
}

}

最佳答案

介绍

关于 BlazoredTypeahead SearchMethod是异步的,因为此委托(delegate)旨在为数据调用后端并且我们不能阻止 UI 线程等待结果。通常:

private async  Task<IEnumerable<Film>> SearchFilms(string searchText)
{
try
{
var result = await BackendService.SearchFilms(searchText);
return result;
}
catch ( ... )
{
UiShowError( ... )
return empty_list;
}
}

但在您的情况下,不涉及任何后端操作并且您的整个方法是同步的。然后,编译器将发出警告,因为它们不是任何 async操作到您的方法中。

此外,quoting docs :

You must provide a method which has the following signature Task<IEnumerable<T> MethodName(string searchText), to the SearchMethod parameter.

解决方案

一个简单易读的解决方案是制作一个 async调用你的方法:

private async  Task<IEnumerable<Film>> SearchFilms(string searchText)
{
var result = Films
.Where(x => x.Title.ToLower().Contains(searchText.ToLower()))
.ToList();
await Task.CompletedTask; // avoid warning (*1)
return result;
}

但还有其他更多方法可以做到这一点:您可以进行微优化并避免 async并转换 result进入task , 请参阅 aguas's answer .

(*1) 您还可以避免警告写 #pragma warning disable CS1998在方法之上(感谢 @Henk Holterman )

关于c# - 返回类型错误的 Blazor 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57991410/

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