为接受继承的集合类型的 ICollection 创建 ExtensionMethod

Create ExtensionMethod for ICollection accepting inherited collection types

我正在创建一个 class 可以接受泛型类型作为数据,如果是集合类型,我想创建一个用于在其中添加元素的扩展方法。到目前为止,我有以下扩展方法:

public ActionResponseBuilder<ICollection<TElement>> AddElement<TElement>(this ActionResponseBuilder<ICollection<TElement>> builder, TElement element)
{
    //TODO Logic
    return builder;
}

我对此的测试方法:

var data = DateTime.Now;

var builtActionResponse = new ActionResponseBuilder<List<DateTime>>()
       .SetData(new List<DateTime> { data })
       .AddElement(data)
       .Build();

但是我遇到了以下错误:

Error CS1929 'ActionResponseBuilder>' does not contain a definition for 'AddElement' and the best extension method overload 'ActionResponseBuilderHelper.AddElement(ActionResponseBuilder>, DateTime)' requires a receiver of type 'ActionResponseBuilder>

如果我将扩展方法的类型更改为 List,它可以工作,但我想为此利用继承和泛型的强大功能,

我缺少什么,我可以这样做吗?有什么想法吗?

非常感谢您:)

PD: 这个东西是一个小的nuget工具的一部分,除了这个新的实现之外的所有代码都可以在下面找到GitHub存储库:

编辑:最初,扩展方法的名称被错误地复制了 AddData -> AddElement,感谢@Fabjan

您可以更改扩展方法以同时采用 T 和 TElement 并限制 T 以强制它成为 ICollection:

public static class Extensions
{
    public static ActionResponseBuilder<T> AddData<T, TElement>(this ActionResponseBuilder<T> builder, TElement element) where T : ICollection<TElement>
    {
        // TODO: Logic

        return builder;
    }
}

现在你可以这样引用它了:

ActionResponseBuilder<List<DateTime>> builder = new ActionResponseBuilder<List<DateTime>>()
    .AddData(DateTime.Now);