具有通用约束的C#方法重载

问题描述

对不起,如果已经回答了(我在SO上找不到)。我们已经发布了.NET SDK库,该库公开了一种具有一般约束的方法。 我的目标是重载此方法,并公开具有不同泛型约束的另一种方法

// This already exists in the SDK.
public T UpdateConfiguration<T>(T entity) where T : ISystemConfig
{
   ...
}

// This is our objective. Expose another method for users.
public T UpdateConfiguration<T>(T entity) where T : IDataConfig
{
   ...
}

显然,C#(.NET 4.7.2)不允许这样做。 编译器将引发错误A member UpdateConfiguration<T>(T) is already defined. Rename this member or use different parameter types

来自Java背景,我对此错误感到惊讶。尽管我在重载此方法,但是参数/参数受另一种类型的约束。

下面是代码样本,以显示我的意思。 Java允许这样做,但C#不允许。


按照最佳工程实践的最佳方式是什么?我不想将方法重命名UpdateConfiguration2,因为我们想在我们的SDK中为消费者保持一些统一性。

正如编译器建议的那样,更改参数类型是唯一的解决方案吗?

T UpdateConfiguration(ISystemConfig entity)T UpdateConfiguration(IDataConfig entity)

第二个选项将撤消类型推断的某些优点。当前,UpdateConfiguration(SomeType obj)会将T推断为SomeType。通过更改参数(第二个选项),我必须每次都要UpdateConfiguration<SomeType>(SomeType obj)来推断T

还有什么逻辑原因为什么C#不支持功能

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)