[英]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.