繁体   English   中英

访问操作的输出参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM