【发布时间】:2010-12-09 10:22:12
【问题描述】:
在我的项目中,我有以下三个接口,它们由管理合并具有不同结构的各种业务对象的类实现。
public interface IMerger<TSource, TDestination>
{
TDestination Merge(TSource source, TDestination destination);
}
public interface ITwoWayMerger<TSource1, TSource2, TDestination>
{
TDestination Merge(TSource1 source1, TSource2 source2, TDestination destination);
}
public interface IThreeWayMerger<TSource1, TSource2, TSource3, TDestination>
{
TDestination Merge(TSource1 source1, TSource2 source2, TSource3 source3, TDestination destination);
}
这很好用,但我宁愿有一个IMerger 接口,它指定可变数量的TSource 参数,如下所示(下面的示例使用params;我知道这不是有效的C#):
public interface IMerger<params TSources, TDestination>
{
TDestination Merge(params TSource sources, TDestination destination);
}
有什么方法可以实现这一点,或者功能上等效的东西吗?
【问题讨论】:
-
你不能使用可变数量的参数创建一个接口,但你可以为所有变体赋予相同的名称(就像
Func委托一样) -
虽然这只是一个无效的伪代码,但像
public interface IMerger<TDestination, params TSources> { TDestination Merge(TDestination destination, params TSource sources); }这样写更有意义。params应该排在最后。但正如 Christian Hayter 所说,拥有基类是唯一的解决方法
标签: c# .net generics parameters