C#更新另一个函数中的参数

时间:2016-12-27 06:29:20

标签: c# dictionary design-patterns reference

我有一个定义以下方法的类 -

void DoAction1(out object result1)
{
    // Do some work and set result1
}

void DoAction2(out object result2)
{
    // Do some work and set result2
}

void ExecuteAllActions()
{
    //Some more execution work happens here 
    // which may cause modifications to  result1 and result2
}

我是否可以通过某种方式将ref存储到两个参数中并在ExecuteAllActions()函数中更新它们?

2 个答案:

答案 0 :(得分:0)

由于您提供的信息量有限,我只能说你做错了。作为一般规则,您永远不会编写具有out参数和void返回类型的方法,因为您只需返回您将分配给out参数的任何对象。这种方法更容易,更简单:

object DoAction1()
{
    // Do some stuff and return a result object
}

object DoAction2()
{
    // Do some stuff and return a result object
}

void ExecuteAllActions()
{
    var actionResult1 = DoAction1();
    var actionResult2 = DoAction2();
}

答案 1 :(得分:0)

有意 - 在.NET类型系统中没有办法将ref存储到变量中。这样可以避免存储对生命周期结束的变量的引用的问题。

但是,我注意到一个单元素数组是一个可以作为引用类型传递的对象,其唯一元素是一个可以作为ref或out传递的变量。显然你可以存储一个单元素数组,随意传递它等等。

那就是说,如果你需要采取这样的技巧,那么设计中可能存在一些错误。尝试制作带有值和返回值的API,而不是接受变量并改变它们。