首页 > 解决方案 > 如何在 Blazor 中创建必须从具有泛型类型的类继承的泛型类型?

问题描述

我正在尝试创建一个具有 3 种泛型类型的类,其中一种类型必须从具有其他 2 种泛型类型的其他类继承。

我真正需要的是IForm继承自FormComponent所以它实现了所有的方法。

Form.razor

@typeparam TForm
@typeparam TModel
@typeparam TResult

<EditForm Model="@Model" OnValidSubmit="@HandleValidSubmit">
    @ChildContent
</EditForm>

表单.razor.cs

public partial class Form<TForm, TModel, TResult>  
    where TForm : FormComponent<TModel, TResult>
{

    [Parameter]
    public TForm FormRef { get; set; }

    [Parameter]
    public EventCallback<TResult> OnValidSubmit { get; set; }

    [Parameter]
    public TModel Model { get; set; }

    // ... 
    // some other properties
}

表单组件.cs

public abstract class FormComponent<TModel, TResult> : BaseDomComponent
{        
    [CascadingParameter]
    public TModel Model { get; set; }

    public abstract TResult OnValidSubmit();

    // ... 
    // some other properties   
}

我使用表单的代码

<Form Model="@Entity" FormRef="@_formRef" OnValidSubmit="@HandleValidSubmit">
    <XYZForm @ref="_formRef" />
    <Button ButtonType="ButtonType.Submit">Submit</Button>
</Form>

但这给了我错误

错误 CS0314 类型“TForm”不能用作泛型类型或方法“Form<TForm,TModel,TResult>”中的类型参数“TForm”。没有从 'TForm' 到 'Core.Web.Base.FormComponent< TModel, TResult >' 的装箱转换或类型参数转换

我在很多地方搜索了这个错误,但没有发现任何有 3 种泛型类型的情况。我也阅读了文档 ,但无法用它来解决我的问题。

标签: c#genericsblazorasp.net-blazor

解决方案


只是发现这个问题是关于 blazor不支持类型约束的。

@juharr 问我是否在其他地方使用它。我说不,但实际上我在 blazor 组件中使用它,它还没有那种支持;/


推荐阅读