【问题标题】:Access action's out parameter访问动作的输出参数
【发布时间】:2018-03-15 17:09:37
【问题描述】:

假设出于某种奇怪的原因(interop infact)我有这个方法

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 参数传递,因为它的实现是在非托管代码中。

【问题讨论】:

    标签: c# action out


    【解决方案1】:

    您不能专门对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;}
    }
    

    【讨论】:

    • 非常感谢,这正是我要找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    相关资源
    最近更新 更多