Self-Disposable (inline) declaration for C# disposable variable

时间:2018-02-03 11:18:15

标签: c# dispose disposable

I can hardly believe the C# developers didnt thought about that. I dislike that there doesnt exist better way to create one-time disposable variables, as we have to declare them in blocks:

using( XYZ x = smth){
    ShowForm(Color.Blue, x,  "30px");
    ......
}

for me, placing the lines in brackets & placing declarations in-front of code, is visually unpleasent (as it reminds me to be if {} else {} block ).

so, does there exist any alternative way to create self-disposing variables inline, like:

ShowForm(Color.Blue, (using x=smth) x ,  "30px");

?

1 个答案:

答案 0 :(得分:6)

C#不仅没有这方面的设施,而且也不可能在没有表达语义含糊不清的情况下定义它。

using块的限制定义了新添加的变量的范围及其使用寿命。 using块的右括号(或单个语句的末尾没有用花括号括起来)定义了必须在Dispose的对象上调用using的点。子句。

现在想象有一种using表达式可以让我们创建一个“内联”的一次性对象,例如

ShowForm(Color.Blue, using var x = smth,  "30px");

x的使用寿命应该是多少?它应该在ShowForm返回时处理吗?如果你这样做怎么办

Foo(1, Bar(2, using var x = smth))

x完成时应该Bar处理,还是等待Foo完成?

还有其他上下文,例如循环和条件语句的控制表达式,其中一次性变量的范围将变得模糊不清。这就是为什么C#坚持对using子句中引入的一次性变量的范围提供明确的限制。