相关疑难解决方法(0)

我可以使用可变数量的通用参数吗?

在我的项目中,我有以下三个接口,这些接口由管理合并具有不同结构的各种业务对象的类实现.

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);
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但我宁愿有一个IMerger接口指定可变数量的TSource参数,如下所示(下面的例子使用params;我知道这不是有效的C#):

public interface IMerger<params TSources, TDestination>
{
    TDestination Merge(params TSource sources, TDestination destination);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一点,或功能相同的东西?

.net c# generics parameters

36
推荐指数
2
解决办法
2万
查看次数

更糟糕的是:反思还是拳击?

我正在创建自己的DI框架,创建委托工厂作为学习练习.构建类型委托的方法是使用表达式来创建一个函数,该函数通过引用我的容器和任何构造函数参数来调用静态方法.

这引发了一个关于价值类型的有趣问题.哪个性能最高:

a)使用反射选择具有正确参数数量的静态通用方法,然后使用MakeGenericMethod删除泛型

b)去旧时尚params对象[]并采取拳击击中?

.net c# reflection performance boxing

8
推荐指数
1
解决办法
910
查看次数

标签 统计

.net ×2

c# ×2

boxing ×1

generics ×1

parameters ×1

performance ×1

reflection ×1