问题标签 [out-parameters]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3114 浏览

c# - 如何规避在匿名方法块中使用 out 参数?

以下方法无法编译。Visual Studio 警告“不得在匿名方法中使用 out 参数”。该WithReaderLock(Proc action)方法采用delegate void Proc().

获得这种行为的最佳方法是什么?(请不要提供关于线程安全字典的建议,这个问题通常是为了解决 out 参数问题)。

0 投票
3 回答
1821 浏览

c# - C# Out 参数问题:Out 如何处理值类型?

更新所以完全拉了一个工具时刻。我真正的意思是参考与输出/参考。任何说“参考”的东西,我真正的意思是参考,如

一些方法(对象一些对象)

相对

SomeMethod(out someObject)

对不起。只是不想更改代码,因此答案已经有意义。

据我了解,与 ref 不同,它“复制”指针并在堆栈上创建一个新空间以使用该指针,但不会更改指针:

Out 复制指针并可以操纵它指向的位置:

对对象来说这很好而且很花哨,但是值类型怎么办,因为它们没有任何东西指向仅在堆栈上?

0 投票
3 回答
266 浏览

com - 即使 COM 功能失败,是否应该设置 out 参数?

在实现COM接口时,我总是在成功时分配输出参数,但我也应该在错误时这样做吗?

有一次,我因为没有初始化一个 out 参数并假设如果我初始化变量,如果我不在方法内部更改它,它将保持那个值。但是我使用了这个方法.NET,因为编组器看到这是一个[out]参数,它丢弃了我放在调用站点上的初始值,并在函数返回后放入垃圾中(调试很有趣,不是)。

即使在故障过度补偿时也分配给out参数还是我真的应该这样做?


编辑:即使在函数失败的情况下正式不应访问参数我经常看到(有时编写)这样的代码(使用Sharptooth的帖子中的示例):

这在未编组的代码(相同的线程单元)中可以正常工作,但是如果涉及编组器,它是否足够聪明,仅在函数成功时才设置返回值?

0 投票
2 回答
216 浏览

com - 我应该如何检查 COM 中的 [out] 参数是否可以使用?

除非函数成功,否则官方不应使用[out]COM 函数中的参数,这意味着(至少)有三种方法可以查看是否[out]可以使用参数。

考虑以下接口

您会推荐以下哪种方式来使用它?

1.检查返回值

这让我有点紧张,因为一个错误IFoo可能会导致NULL指针取消引用。

2.检查输出参数

这取决于一个事实,如果一个方法失败,它不能改变任何[out]参数(如果参数改变了 <==> 使用它是安全的)。

请注意,无论如何都会发生这种情况,如果指针不存在,则CComPtr析构函数将调用,因此它不会是垃圾。ReleaseNULL

3.偏执的方式,检查两者

在我看来,这有点冗长。


PS 见相关问题

0 投票
4 回答
3779 浏览

stored-procedures - SubSonic:检索存储过程 OUT 参数的值

我喜欢你的工具。我一直在使用它,但是今天我遇到了一个问题......

我编写了一个通过 OUT 参数返回一些值的存储过程,但 SubSonic 似乎没有生成存储过程方法的输出参数。例如,对于这样的 SPI:

CREATE PROC dbo.MyProc @param1 int, @param2 int out, @param3 varchar(150) out

它生成签名

SPs.MyProc(int?param1, int?param2, string param3

我希望它会产生这个

SPs.MyProc(int?param1, out int?param2, out string param3)

好吧,考虑到该方法实际上只是配置了 SP 而没有实际执行它,我希望 Subsonic 会生成这个

SPs.MyProc(int?param1, ref int?param2, ref string param3)

你们如何解决这个问题?Subsonic 已经有类似的东西了,我只是错过了它吗?

0 投票
10 回答
11789 浏览

c# - 为什么'ref'和'out'不支持多态性?

采取以下措施:

为什么会出现上述编译时错误?refout参数都会发生这种情况。

0 投票
1 回答
2576 浏览

c# - 动态方法和输出参数?

如何为具有out-parameter 的委托定义 DynamicMethod ,像这样?

假设我只是想要一个在调用该方法时将a参数设置为null的方法。

请注意,我知道处理此问题的一种可能更好的方法是使该方法返回Action委托,但这只是较大项目的简化部分,并且所讨论的方法已经返回了一个值,我需要处理该out参数除此之外,还有这个问题。

我试过这个:

但是,我明白了:

del(out a);线。

请注意,如果我注释掉在堆栈上加载 null 并尝试将其存储到参数中的两行,则该方法将无异常运行。


编辑:这是最好的方法吗?

0 投票
2 回答
32436 浏览

c# - 在 C# 中将属性作为“out”参数传递

假设我有:

我想将Value成员作为输出参数传递,例如

但我得到一个编译错误,“'out' 参数未被归类为变量。” 有没有办法实现这一点,或者我将不得不提取一个变量,à la:

0 投票
4 回答
1591 浏览

c# - 代码分析返回有关不使用“out”参数的建议

我针对我创建的对象运行 VS 2008 代码分析工具并收到以下建议...

警告 147 CA1021:Microsoft.Design:考虑不需要将“returnValue”作为输出参数的设计。

我发现“输出”参数相当有用,并且没有意识到它们被认为是不赞成设计实践的。我想知道是否有人可以阐明我收到此警告的原因?如果这是不好的做法?为什么?什么是好的做法?

我很感激任何建议。

0 投票
6 回答
24861 浏览

c# - C#中的空参数?

在阅读 stackoverflow 后,在检查 DateTime 格式的情况下,您应该使用 DateTime.TryParse。在尝试了一些正则表达式之后,他们似乎变得又长又讨厌,想要涵盖很多格式。

但是 TryParse 需要一个“out”参数,因为我只想进行验证格式检查,所以不需要实际结果。

所以我只剩下一个变量来保存“输出”结果,我什么也不做。有没有办法让我不必做一个输出参数?

所以我摆脱了这个警告,不再让一个变量到处乱飞。