无法将 lambda 表达式转换为预期的委托类型,因为块中的某些 return 类型不能隐式转换为委托 ret 类型

Cannot convert lambda expression to intended delegate type because some of return types in block aren't implicitly convertible to delegate ret-type

我在 Blazor 服务器端页面上有这段代码:

protected override async Task OnInitializedAsync()
{
    try
    {
        _model = await BudgetReleaseRequestProviderService.GetMeetingById(MeetingId);           

        var meetingRequestsIds = await BudgetReleaseRequestProviderService.GetMeetingDetailsForMeeting(_model.Id);
        var selectedRequestIds = meetingRequestsIds.Select(s => s.RequestId).ToArray();

        var meetingRequests = (await BudgetReleaseRequestProviderService.GetAllRequests())
            .Where(w => selectedRequestIds.Contains(w.Id)).ToList();

        _requestsData = new List<MeetingRequestActionViewModel>(meetingRequests.Cast<MeetingRequestActionViewModel>());
    }
    catch (Exception e)
    {
        LoadingStatus = $"Error while loading meeting #{MeetingId}. Error: {e.Message}";
        Console.WriteLine(e);
    }
}

没有错误,但在构建时出现以下错误:

错误:

这些错误在页面的 .g.cs 文件中。我无法理解那个文件。我的 Linq 中有一个 Contains 调用,这是我距离故障排除最近的一次。

类:

public class MeetingRequestActionViewModel: BudgetReleaseRequestViewModel
    {}

public partial class BudgetReleaseRequestViewModel
{       
    public long Id { get; set; }

    [Required]
    [Display(Name = "Description")]
    public string Description { get; set; }

    [Required]
    [Display(Name = "Amount")]
    [DataType(DataType.Currency)]
    public decimal Amount { get; set; }

    public string RequesterId { get; set; }

    [Display(Name = "Budget Owner")]
    public string BudgetOwnerId { get; set; }

    [Required]
    [Display(Name = "Submission Date")]
    [DateTodayAndOnwards(ErrorMessage = "This date cannot be before today.")]
    [DataType(DataType.Date)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "dd/MMM/yyyy")]
    public DateTime SubmissionDate { get; set; }
}

仅出于此页面的考虑,我决定基于现有视图模型创建视图模型并添加两个 extr 必填字段。这就是为什么会有转换。

原来错误是指向剃刀语法而不是我的代码块。这是引起悲伤的原始台词:

<DxDataGridColumn Field="@nameof(MeetingRequestActionViewModel.MeetingResultComments)">
    <DisplayTemplate Context="currentRequest">
        @{
            var thisItem = currentRequest as MeetingRequestActionViewModel;
           <TelerikEditor @ref="@_editorRef" @bind-Value="@thisItem?.MeetingResultComments" Height="200px" Tools="@EditorToolSets.Default">
           </TelerikEditor>
        }
    </DisplayTemplate>
</DxDataGridColumn>

这是我的修改:

<DxDataGridColumn Field="@nameof(MeetingRequestActionViewModel.MeetingResultComments)">
    <DisplayTemplate Context="currentRequest">
        @{
            if (currentRequest is MeetingRequestActionViewModel thisItem)
            {
                <TelerikEditor @ref="@_editorRef" @bind-Value="@thisItem.MeetingResultComments" Height="200px" Tools="@EditorToolSets.Default">

                </TelerikEditor>
            }
        }
    </DisplayTemplate>
</DxDataGridColumn>

我的原始代码导致了问题,因为我使用 ?

thisItem?.MeetingResultComments 间接转换为 Nullable

这个答案可能会帮助其他遇到同样错误的人。感谢@Hassan Gulzar 发布您的“修复”

你的话:这些错误在页面的 .g.cs 文件中。 正是我的情况让我在 HTML 导致了与您修复的错误相同的错误。

在我使用 Blazor-WASM、.Net 6 的情况下,使用 控件,我将 HTML-control 更改为 并且subject-error 已修复。您的解决方案让我直接修复了我的代码。非常感谢。

在我的例子中,我将 EditForm 的模型 class 更改为:

NewRegForm newRegistration = new NewRegForm();

然后我有一个重置按钮,具有尝试旧类型新功能的功能。

@onclick="@(() => newRegistration = new Registration())"