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

Has*_*zar 6 blazor-server-side .net-5

我的 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

没有错误,但是当我构建时,我收到以下错误:

错误:

  • CS1662 无法将 lambda 表达式转换为预期委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型
  • CS0131 赋值的左侧必须是变量、属性或索引器

这些错误位于.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; }
}
Run Code Online (Sandbox Code Playgroud)

仅为了这一页的目的,我决定基于现有视图模型创建一个视图模型,并添加两个 extrs 必填字段。这就是为什么会有转换。

bob*_*obt 11

我身上发生过两次。

有一次是因为我从底部的@code中删除了一个方法,但后来忘记删除调用该方法的按钮。

另一次是由于我尝试访问不存在的属性/字段。

在这两种情况下,Visual Studio 都没有对问题进行红线标注,而且编译错误消息中报告的行号与代码实际存在问题的位置并不对应。但一个好消息是智能感知自动完成功能是正确的。如果您键入代码,它不会让您使用不存在的变量或方法自动完成。

您可以尝试通过搜索“错误”从输出窗口获取更准确的错误。在下图中,输出窗口中的文本是正确的问题,而“错误列表”窗口中的文本没有帮助。此外,当我单击“输出”窗口中的错误文本时,它会将我带到代码中存在问题的正确行。

错误列表窗口与输出窗口


Has*_*zar 8

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

<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>
Run Code Online (Sandbox Code Playgroud)

这是我的修改:

<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>
Run Code Online (Sandbox Code Playgroud)

我的原始代码引起了问题,因为我间接将 转换thisItem?.MeetingResultComments为 Nullable?