gpt4 book ai didi

c# - 使用参数安全调用多次调用泛型方法(运行时返回类型)的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:44:18 25 4
gpt4 key购买 nike

我觉得我已经很接近解决这个问题了,并且已经阅读了数十篇文章和现有问题。

我有这样的方法:

public T DoStuff(object arg1, object arg2)
{
/* Do stuff and return a T */
}

而且我需要能够将此方法传递给另一个类以进行回调。
但是,当这个其他类回调时,它将使用仅在运行时才知道的不同预期返回类型进行回调。

例如:

public void SomeMethod(MethodInfo m, ref object caller)
{
MethodInfo callback = m.MakeGenericMethod(new Type[] { runtimeType });
callback.Invoke(caller, new [] { arg1val, arg2val });
}

/* DoStuff() will make a call to SomeMethod() passing
* itself (the method and the object) */

但是,我希望能够代替这个

  1. 仅将单个回调对象(即委托(delegate)或 Func<>)传递给 SomeMethod。
  2. 能够为通用调用适本地修改此对象。
  3. 为调用提供类型安全的参数,就像使用委托(delegate)/Func<> 一样。

我找到了适合每一种方法的方法,但没有一种方法可以涵盖所有方法。

可能吗?

最佳答案

来自MakeGenericMethod用法,我假设该方法(在您的示例中)在 T 中是通用的:

public T DoStuff<T>(object arg1, object arg2)

考虑到您所做的大量反射(reflection),这对您没有任何好处;从反射中使用你也可以使用:

public object DoStuff(Type type, object arg1, object arg2)

并使用(例如)Activator.CreateInstance(type)创建一个实例。以上内容现在可以与委托(delegate)一起使用;例如 Func<Type,object,object,object> .

关于c# - 使用参数安全调用多次调用泛型方法(运行时返回类型)的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com