C #: привязка переменной для конкретной области - PullRequest
2 голосов
/ 02 октября 2009

В некоторых языках есть такие вещи:

Лисп:

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

JavaScript:

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

Есть ли что-нибудь подобное в C #?

Ответы [ 2 ]

6 голосов
/ 02 октября 2009

Вы можете ограничить область действия переменной типа значения с помощью фигурных скобок.

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

Последняя строка сгенерирует ошибку компилятора, так как x больше не определяется.

Это будет работать и для типов объектов, но не гарантирует, когда объект будет удален после того, как он выпадет из области видимости. Чтобы обеспечить своевременное удаление типов объектов , которые реализуют IDisposable , используйте using:

using (var x = new YourObject())
{
    doSomethingWith(x);
}
generateCompilerError(x);
1 голос
/ 02 октября 2009

Вы можете использовать блок для имен областей. Из спецификации C #:

8,2 блоков

Блок позволяет записывать несколько операторов в контекстах, где допускается одна инструкция.

блок: {Statement-listopt}

Блок состоит из дополнительного список выписок (§8.2.1), заключенный в брекеты. Если список выписок опущен, блок называется пустой.

Блок может содержать объявление заявления (§8.5). Сфера локальная переменная или константа, объявленная в блок это блок.

Внутри блока значение имени используется в контексте выражения должен всегда быть одинаковым (§7.5.2.1).

...