在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'的定义...
答案 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 {}
}