使用反射和运行时已知的类型调用 Func 对象

我一直在努力处理这种情况。

我有一种情况,我有一个Type和类型的对象,Func<string, (bool, T)>其中 T 与Type. 我希望能够通过反射或其他方式调用它的Invoke方法。

Type在运行时有一些:

Type type;

我有Func记忆,但作为一个object

object func;

底层的 Typefunc就是我之前描述的。例如,如果type代表DateTime,则func的基础类型将是:

Func<string, (bool, DateTime)>

但是type在运行时可以是任何东西,所以如果它是一个int,那么func现在将是一个

Func<string, (bool, int)>

我如何使用我在运行时拥有正确类型的事实来调用我的 func?我假设我必须使用某种反射,但并没有真正理解它以开始使用。

任何帮助是极大的赞赏。

总的来说,我对反思还很陌生,但我发现它对某些事情来说非常有趣且非常困难。如果您有任何关于阅读的建议或任何其他关于如何更好地学习反思的技巧,那也太棒了!

经过更多思考后编辑/更新

dynamic这种方式使用和调用 Invoke会更好吗?看起来它会工作得很好,但是这就提出了一个问题,为什么你会经历更困难或更长时间的设置反射来调用某些东西的过程,而不是简单的动态调用。

无论如何,我仍然想知道这将如何使用反射来工作,看看会很有趣


幕布斯6054654
浏览 141回答 2
2回答

繁花如伊

如果您知道像 Func 这样的函数类型,则可以直接将其转换为如下所示&nbsp;private static void InvokeFunctionDynamically<T>(T data)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //1. Define the delegate&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Func<string, bool, T> genericFunction = (name, isEnabled) =>&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(isEnabled)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return data;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return default(T);&nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; // 2. demonstrate that the delegate is retrieved at the run time as an object&nbsp; &nbsp; &nbsp; &nbsp; object runtimeObject = genericFunction;&nbsp; &nbsp; &nbsp; &nbsp; //3. Cast it directly to the delegate type&nbsp; &nbsp; &nbsp; &nbsp; var result =((Func<string, bool, T>) runtimeObject)("hello", true);&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine($"Result {result}");&nbsp; &nbsp; }结果如下:
打开App,查看更多内容
随时随地看视频慕课网APP