c# - function寫法 - 自建函數r




如何將代表R函數<T,R>(T t)轉換為Func<T,R>? (2)

我有遺留的代碼,定義了以下的幫手

public delegate R Function<T, R>(T t);

但是我想提供一個Func<T,TResult>

鑄造嘗試無法編譯

無法將類型' System.Func<T,TResult> '轉換為' Rhino.Mocks.Function<T,TResult> '

有沒有一種方法,不僅編譯,而且在運行時的功能?


Jared和phoog都是對的。 做同樣的事情的第三種方法,只是為了完成,是:

Func<int, string> func = i => i.ToString();
Function<int, string> function = func.Invoke;

也就是說,新委託是第一個委託的invoke方法的委託 ,它具有正確的簽名。

那個必須做到這一點是令人煩惱的極端。 如果我們從頭開始設計運行時,現在知道我們現在知道的有關人們如何使用委託類型的信息,我認為可能會為每個簽名構建委託類型(就像存在一個 “整數的單維數組” “類型),或者代表類型之間會有”結構性標識“。 下次為虛擬機設計類型系統時,請記住這一點。


你可以像JaredPar所建議的那樣創建一個lambda表達式,或者將其傳遞給另一個的構造函數:

Func<int, string> f1 = i => i.ToString();
Function<int, string> f2 = new Function<int, string>(f1);




func