【发布时间】:2014-06-17 06:36:06
【问题描述】:
我正在从运行时传递给我的字符串动态创建一个类型。
我现在有以下代码:
string messageType = "CustomerCreatedMessage";
//Convert the string to a Type
var type = Type.GetType(messageType);
//Create a Type of Action<CustomerCreatedMessage>
var action = typeof(Action<>).MakeGenericType(messageType);
如何创建action 类型的变量并将lambda m=> SetActive(true) 分配给它?然后,我将在以下代码中使用变量(此处名为 ???):
//Create a generic method "Register" on my Messenger class that takes an Action<CustomerCreatedMessage> parameter.
var method = typeof(Messenger).GetMethod("Register");
var genericMethod = method.MakeGenericMethod(action);
//Invoke the created method with our script in it
genericMethod.Invoke(Messenger.Default, ???);
我的目标是能够使用Action<> 调用我的泛型方法Messenger.Default.Register<>,该方法将使用我的messageType 字符串创建的类型作为类型参数。
我已经尝试过以下方法:
Convert.ChangeType(m=>SetActive(true),action);
var filledAction = Activator.CreateInstance(action);
filledAction = m=>SetActive(true);
但是这两种方法都抱怨将 lambda 表达式转换为对象,因为它不是委托。
如果我将SetActive(true) 放入方法中并尝试传递方法组,我会收到类似的错误。
【问题讨论】:
-
只是检查一下,你真的不关心参数吗?
-
根本没有,只是在消息进来的时候触发代码。
标签: c# generics types lambda type-conversion