c#Invoke调用方法,怎么获取方法的返回值
时间: 2024-12-21 15:23:33 浏览: 9
在 C# 中,如果你想通过 `Invoke` 方法调用实例方法并获取其返回值,你需要确保方法有明确的返回类型,并且该类型可以被序列化到 `object`。例如,如果你有一个返回 `string` 的方法:
```csharp
public class MyClass
{
public string MyMethod()
{
return "Hello, World!";
}
}
```
你可以这样做:
```csharp
MyClass obj = new MyClass();
MethodInfo methodInfo = obj.GetType().GetMethod("MyMethod"); // 获取方法信息
// 创建委托
Func<string> methodInvoker = (Func<string>)methodInfo.CreateDelegate(typeof(Func<string>)); // 将方法转换为 Func<string>
string returnValue = methodInvoker(); // 调用方法并获取返回值
Console.WriteLine(returnValue); // 输出:Hello, World!
```
这里我们先创建了一个 `MethodInfo` 对象,然后使用 `CreateDelegate` 方法将该方法转换为可以被 `Invoke` 调用的委托(`Func<string>`)。最后,通过委托直接调用方法并得到返回值。
但是需要注意的是,对于复杂类型或者不可序列化的返回值,你可能需要手动处理或者使用其他策略,比如反射或序列化临时变量等。此外,如果方法有引用类型的返回值,你需要确保返回的对象能够生存于整个生命周期,否则会因为垃圾回收而丢失。
阅读全文