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");
?
答案 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
子句中引入的一次性变量的范围提供明确的限制。