gpt4 book ai didi

c# - 我可以将 using() {} block 与方法的 out 参数结合使用吗?

转载 作者:行者123 更新时间:2023-12-04 02:03:26 25 4
gpt4 key购买 nike

给定一个方法

public static bool Connection.TryCreate(out Connection connection) {}

还有一段调用代码:
Connection connection;
if (!Connection.TryCreate(out connection))
// handle failure gracefully.

/*
* work with connection
*
* …
*
*/

connection.Dispose();

我使用与 bool.TryParse 相同的模式和 friend ,即 TryCreate返回操作是否成功。

我意识到 using()变量需要在其块内为只读,但有没有办法将上述内容转换为 using() {}块( TryCreate 只设置一次),如下所示:
using (Connection connection)
{
if (!Connection.TryCreate(out connection))
// this would leave the using() block prematurely

/*
* work with sconnection
*
* …
*
*/
}

(这不会编译:

error CS1657: Cannot pass 'connection' as a ref or out argument because it is a 'using variable'



)

最佳答案

不,那是不可能的。
using (x) {...}构造复制 x当它进入块时,你可以这样做:

var x = new FileStream(...);
using (x)
{
x = null;
}

using 时,流仍将被处理。块结束。

推论是这也行不通:
Stream x = null;
using (x)
{
x = new FileStream(...);
}

在这里,您在 using 块中构造的流将不会被处理。

但是,您可以做的是:
Connection connection;
if (Connection.TryCreate(out connection))
using (connection)
{
}

在 C# 7.0 及更高版本中,您可以将其与“输出变量”结合以形成:
if (Connection.TryCreate(out var connection))
using (connection)
{
}

关于c# - 我可以将 using() {} block 与方法的 out 参数结合使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8196216/

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