gpt4 book ai didi

c# - 访问 Action 的输出参数

转载 作者:行者123 更新时间:2023-11-30 21:35:19 26 4
gpt4 key购买 nike

假设出于任何奇怪的原因(互操作实际上)我有这个方法

void DoSomething(out MyStruct myStruct)
{
// Setting the struct members here.
}

我想传递给另一个看起来像这样的方法:

ExecuteAndProcess(Action action)
{
action();
// How can I access the out parameter here?
}

问题是那时我不知道如何访问out参数;我试图将 ExecuteAndProcess 的定义更改为

ExecuteAndProcess(Action action, ref MyStruct myStructParam) 
{
action();
var member = myStructParam.Property1;
// ...
}

这样我就可以这样调用它,希望 myStructParam 参数能够反射(reflect)出 myStruct 变量的变化

MyStruct myStruct = default;
ExecuteAndProcess(() => DoSomething(out myStruct), ref myStructParam);

但事实并非如此。


有什么方法可以执行操作并访问 ExecuteAndProcess 方法中的 out 参数?

遗憾的是,我无法让 DoSomething 简单地返回结构而不是将其作为 out 参数传递,因为它的实现是在非托管代码中。

最佳答案

您不能对 Action 类型执行此操作,因为没有包含 out 参数的 Action 类型。但是您可以创建自己的委托(delegate)类型并改用它:

void Main()
{
ExecuteAndProcess(DoSomething);
}

void ExecuteAndProcess(MyAction action)
{
MyStruct myStruct;
action(out myStruct);
// access the out parameter here
Console.WriteLine(myStruct.A);
}

delegate void MyAction(out MyStruct myStruct);

void DoSomething(out MyStruct myStruct)
{
// Setting the struct members here.
myStruct = new MyStruct{A = 1};
}

public struct MyStruct{
public int A{get;set;}
}

关于c# - 访问 Action 的输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49305380/

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