gpt4 book ai didi

C# 输出参数诡计?

转载 作者:行者123 更新时间:2023-11-30 13:53:17 26 4
gpt4 key购买 nike

您好,我有与此类似的 C# 代码:

int someNumber;
Thing someThing;

doStuff(out someNumber);
someThing = new Thing(someNumber);

我想知道的是,是否有任何方法可以删除 someNumber 并直接在参数参数中实例化 someThing。

编辑 actaul 代码返回 8 个输出参数,但我只是想保持简单所以它更像是:

int someNumber1, someNumber2, somNumber3, someNumber4,
someNumber5, someNumber6, someNumber7, someNumber8;

Thing someThing1, someThing2, someThing3, someThing4,
someThing5, someThing6, someThing7, someThing8;

doStuff(out someNumber1, out someNumber2, out someNumber3, out someNumber4,
out someNumber5, out someNumber6, out someNumber7, out someNumber8);

someThing1 = new Thing(someNumber1); etc.....................

最佳答案

好吧,如果您发现自己经常这样做,您可以做如下事情:

public delegate void OutAction<T>(out T value);

public TResult UseOut<TIntermediate,TResult>
(OutAction<TIntermediate> outAction,
Func<TIntermediate,TResult> selector)
{
TIntermediate tmp;
outAction(out tmp);
return selector(tmp);
}

然后调用它(注意 doStuff 这里是一个方法组 - 缺少 () 是故意的!):

Thing someThing = UseOut(doStuff, x => new Thing(x));

我不一定说这是个好主意,只是需要考虑一下。

编辑:当您开始获取多个参数时,它变得更加困难 - 因为输出参数可能是第一个、第二个、第三个、第四个等等...

编辑:稍微简单的版本:

public TResult ReturnOut<TResult>(OutAction<TResult> outAction)
{
TResult tmp;
outAction(out tmp);
return tmp;
}

用法:

Thing someThing = new Thing(ReturnOut(doStuff));

关于C# 输出参数诡计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/585372/

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