[英]Access action's out parameter
假设出于任何奇怪的原因(互操作性),我都有此方法
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
参数将反映myStruct
变量上的更改
MyStruct myStruct = default;
ExecuteAndProcess(() => DoSomething(out myStruct), ref myStructParam);
但事实并非如此。
有什么方法可以执行操作并在ExecuteAndProcess
方法中访问out
参数?
可悲的是,我无法使DoSomething
仅仅返回结构而不是将其作为out
参数传递,因为它的实现是在非托管代码中进行的。
您不能专门使用Action
类型执行此Action
,因为没有包含out
参数的Action
类型。 但是您可以创建自己的委托类型,并使用它:
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;}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.