gpt4 book ai didi

c# - 在 C# 中使用 block 处理顺序

转载 作者:太空狗 更新时间:2023-10-29 19:50:30 24 4
gpt4 key购买 nike

在 C# 中必须嵌套 using block 让我非常烦恼。它不优雅,而且占用大量空间。在某些情况下,这似乎是不可避免的,因为我需要声明不同数据类型的变量,但似乎应该可以简化单一类型的情况。我所说的“单一类型情况”是指串联声明多个相同类型的变量。这是我正在谈论的示例:

class Program
{
static void Main(string[] args)
{
using (A a = new A("a"), b = new A("b"))
{
}
}

class A : IDisposable
{
string n = null;
public A(string name)
{
n = name;
Console.WriteLine(String.Format("Creating {0}", n));
}

public void Dispose()
{
Console.WriteLine(String.Format("Disposing {0}", n));
}
}
}

我希望它工作的方式是 ab 之前构造,而 ba。不幸的是,在 C# 规范中似乎没有关于它应该如何实际发生的任何方向。看起来微软的 C# 编译器是这样处理的,因为这是运行上述程序的输出:

Creating a
Creating b
Disposing b
Disposing a

但是,我无法确保这是确定性行为。有人可以证实或反驳这个序列是确定性的吗?引用会很棒。显然,如果它容易损坏(未记录等),它可能没有用,但知道这一点是件好事。

已经有一个关于 deterministic disposal 的类似问题那谈到了多类型的情况,我知道除了聪明的语法技巧之外没有真正的解决方案。无论如何,那里的大多数答案都没有捕获要点。我的问题只是关于单一类型的情况,以及这种处理是否具有确定性和可靠性。谢谢。

最佳答案

来自C# spec:

using (ResourceType r1 = e1, r2 = e2, ..., rN = eN) 形式的 using 语句恰好等同于一系列嵌套的 using 语句:"

using (ResourceType r1 = e1)
using (ResourceType r2 = e2)
...
using (ResourceType rN = eN)
statement

所以可以说这是一成不变的。

关于c# - 在 C# 中使用 block 处理顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3449557/

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