C#:特定于范围的变量绑定

时间:2009-10-02 11:34:58

标签: c# binding variables scope

在某些语言中,有类似的东西:

Lisp的:

(let ((x 3))
  (do-something-with x))

JavaScript的:

let (x = 3) {
  doSomethingWith(x);
}

C#中有这样的东西吗?

2 个答案:

答案 0 :(得分:6)

您可以使用大括号限制值类型变量的范围。

{
    var x = 3;
    doSomethingWith(x);
}
generateCompilerError(x);

最后一行将生成编译器错误,因为x不再定义。

这也适用于对象类型,但不保证何时对象在超出范围后将被处理。要确保及时处理实施IDisposable 的对象类型,请使用using

using (var x = new YourObject())
{
    doSomethingWith(x);
}
generateCompilerError(x);

答案 1 :(得分:1)

您可以使用块来命名范围名称。来自C#规范:

  

8.2块

     

一个块允许在允许单个语句的上下文中写入多个语句。

     

阻止:{statement-listopt}

     

一个块由一个可选项组成   声明列表(第8.2.1节),随附于   括号。如果声明列表是   省略,该块据说是   空。

     

块可能包含声明   陈述(§8.5)。范围   声明的局部变量或常量   块是块。

     

在一个区块内,名称的含义   必须在表达式上下文中使用   总是一样的(§7.5.2.1)。