簡體   English   中英

通過反射調用Func <int,bool>

[英]invoke a Func<int,bool> by reflection

我想將lambda作為對象存儲,然后使用反射執行它們。 不管這樣做的優點如何,我想知道如何得到類似下面的工作。

假設我將不同的功能定義為 -

Func<string,bool> f1 = (i)=>i == "100";
Func<int,bool> f2 = (i)=>i == 100;

如果我在運行時獲得所有類型,我可以在運行時執行這些(我不能將對象強制轉換為Func等因為我不知道涉及哪些類型),我可以執行以下操作嗎?

void RunFunc(Type param1, Type returnParam, object obj)
{
   Type funcType = typeof(Func<,>).MakeGenericType(param1,returnParam);
   var d = Delegate.CreateDelegate(funcType , obj,"Invoke");
   d.DynamicInvoke();
}

謝謝

你當然可以。 您只需在提供相應類型的參數時調用DynamicInvoke

但為什么要這么麻煩? 你可以做得更簡單

Delegate del;

del = f1;
var result1 = del.DynamicInvoke("99");

del = f2;
var result2 = del.DynamicInvoke(100);

您可以將其中任何一個轉換為Delegate ,甚至不需要知道參數的類型或返回值來調用它們(只是參數的數量)。 當然,你需要在某個時候知道返回值的類型才能使用它,但這就是它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM