Blazor组件中的泛型类型参数可以被约束吗?

时间:2020-10-27 18:58:22

标签: generics components blazor

在Blazor组件中,您可以创建用于方法中的通用参数,就像在典型的C#类中一样。为此,语法为:

@typeparam T

但是我想知道如何在C#类中限制它。像

// pseudocode
@typeparam T : ICloneable 

例如,我需要创建以下组件,以允许开发人员传递通用类型的“模型”:

... / GESD.Blazor / Shared / GesdTrForm.razor

@typeparam modelType

<EditForm Model="@Model" 
    OnValidSubmit="@OnValidSubmit"
    style="display:table-row"
>
    @ChildContent
</EditForm>

@code {

    [Parameter]
    public RenderFragment ChildContent { get; set; }

    [Parameter]
    public modelType Model { get; set; } // here is the use of the generic

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

    void demo () {
        var cloned = Model.Clone();
    }

}

但是在.Clone()处出现以下错误:

'modelType'不包含'Clone'的定义...

1 个答案:

答案 0 :(得分:0)

'... / GESD.Blazor / Shared / GesdTrForm.razor'在名称空间'GESD.Blazor.Shared'下创建一个名为'GesdTrForm'的子类。因为它是部分类,所以您可以创建一个.cs文件,将该类删除为部分类,然后在其中放置约束。

... / GESD.Blazor / Shared / GesdTrForm.cs

using System;

namespace GESD.Blazor.Shared {

    public partial class GesdTrForm<modelType> where modelType : ICloneable {}

}