[英]Add a parameter to an existing Func
这是一个棘手的问题,我不知道是否可能。
假设我有一个DLL中的类Foo1
,但无法对其进行修改。 该类如下所示:
public class Foo1<T1> : IFoo<T1>
{
public Foo1(Func<IFoo, T1, T1> postRead);
}
我想继承Foo1
并能够在原始postRead
注入一个T2
对象,并在基本postRead
访问它。
像这样:
public class Foo2<T1, T2> : Foo<T1>
{
public Foo2(Func<IFoo, T1, T2, T1> newPostRead)
:base(Func<IFoo, T1, T1> secondPostRead)
{
}
}
可能吗?
编辑:我正在使用洞察数据库 。 这是一个ORM。 有功能可以进行后期处理。 代码如下:
public class PostProcessRecordReader<T> : RecordReader<T>
{
public PostProcessRecordReader(Func<IDataReader, T, T> postRead);
}
//How to use the processor
public DummyFunction(ObjectIWantToUse objectIwantToUse)
{
PostProcessRecordReader<Foo> _postProcessorForCubeWithAllEntitiesForBuilding = new PostProcessRecordReader<Foo> (reader, obj) =>
{
//Need to have access objectIwantToUse !!!
//maybe I want to modify obj or add some stuff to it
}
);
//Do some stuff by using _postProcessorForCubeWithAllEntitiesForBuilding
}
通过直接访问读取器,我们可以对从数据库返回的对象进行一些处理。
Foo1<T1>
采用具有两个T1
参数的函数,并返回IFoo<T1>
。 我假设Foo1
在某个时候调用了该函数。
您想要传递给它一个带有两个T1
参数和一个T2
参数的函数。 问题是Foo1
对T2
一无所知 -那么它应该如何知道传入的内容呢?
现在, Foo2
知道了T2
但必须以某种方式将该信息传递给T1。 它可以将原始函数映射到带有较少参数的函数,但是它必须具有某种知道T2
应该是什么的解析器:
public class Foo2<T1, T2> : Foo1<T1>
{
public Foo2(Func<IFoo<T1>, T1, T2, T1> newPostRead, Func<T2> resolver)
:base((IFoo<T1> t1a, T1 t1b) => newPostRead(t1a, t1b, resolver() ))
{
}
}
它至少会编译 ,但是从您的描述中尚不清楚这是否可行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.