无法将 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);
}
}
没有错误,但在构建时出现以下错误:
错误:
- CS1662 无法将 lambda 表达式转换为预期的委托类型,因为块中的某些 return 类型不能隐式转换为委托 return 类型
- 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; }
}
仅出于此页面的考虑,我决定基于现有视图模型创建视图模型并添加两个 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())"
我在 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);
}
}
没有错误,但在构建时出现以下错误:
错误:
- CS1662 无法将 lambda 表达式转换为预期的委托类型,因为块中的某些 return 类型不能隐式转换为委托 return 类型
- 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; }
}
仅出于此页面的考虑,我决定基于现有视图模型创建视图模型并添加两个 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 的情况下,使用
在我的例子中,我将 EditForm 的模型 class 更改为:
NewRegForm newRegistration = new NewRegForm();
然后我有一个重置按钮,具有尝试旧类型新功能的功能。
@onclick="@(() => newRegistration = new Registration())"