具有事件回调的 Blazor 通用组件

Blazor generic component with eventcallback

我创建了一个父组件可以绑定到的组件。这是一个缩小的例子:

<input @bind=@Value />
@code {
    [Parameter]
    public EventCallback<string> ValueChanged { get; set; }
    [Parameter]
    public string Value
    {
        get => _Value;
        set
        {
            if (_Value == value) return;
            _Value = value;
            ValueChanged.InvokeAsync(value);
        }
    }
}

正在运行,父组件可以绑定到值并获取更新。

我现在想让组件通用。这意味着,我希望父组件也能够绑定一个 int 值。 我尝试使用 typeparam,但后来这一行

if (_Value == value) return;

不再工作了。

如何使这个组件通用?

你不能直接使用==比较泛型类型,你需要有一个比较方法。

殿下@JonSkeet here 使用 EqualityComparer<T>.Default.Equals(x, y);

解释了正确的方法

所以你的对比代码(假设泛型是TItem)是:


[Parameter] public EventCallback<TItem> ValueChanged { get; set; }

[Parameter] public TItem Value
   {
      get => _Value;
      set
         {
            if (EqualityComparer<T>.Default.Equals(_Value, value)) return;
            _Value = value;
            ValueChanged.InvokeAsync(value);
         }
    }