Поделиться через


Выражения в C#

Обновлен: Ноябрь 2007

Этот раздел применим к:

Выпуск

Visual Basic

C#

C++

Web Developer

Express

Тема не применяется Тема применяется Тема не применяется Тема применяется

Standard

Тема не применяется Тема применяется Тема не применяется Тема применяется

Pro и Team

Тема не применяется Тема применяется Тема не применяется Тема применяется

Обозначения:

Тема применяется

Применяется

Тема не применяется

Не применяется

Тема применяется, но команда по умолчанию сокрыта

Команда или команды скрыты по умолчанию.

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

  • Идентификаторы и типы

  • Вычисление метода

  • Операторы

  • Перегруженные операторы

  • Строки

  • Приведение типов

  • Операторы "typeof" и "sizeof"

  • Вычисление свойств

Вычислитель выражений игнорирует квалификаторы доступа public, protected, internal и private. Например, можно вызвать метод private из окна Контрольные значения . Поскольку вычислитель выражений игнорирует квалификаторы доступа, имеется вероятность непредвиденного вызова загрузки.

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

Вычислитель выражений также игнорирует проверенные блоки и параметр компилятора /checked. Все выражения вычисляются в неппроверяемом контексте.

Можно настроить отображение пользовательских типов с помощью атрибутов. Дополнительные сведения см. в разделе Отображение пользовательских типов данных.

Идентификаторы и типы

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

Отладчик правильно отображает все переменные простых, перечисляемых и встроенных типов. Для переменных типа класса отладчик правильно отображает значение на основе ближайшего производного типа. Если имеется объект leo типа Lion, производный от типа Cat, то можно вычислить leo.Claws и получить правильное значение для объекта типа Lion.

Можно присвоить новое значение любому выражению левой части, являющемуся L–значением. Это простые типы, классы и типы System.Object.

Вычисление метода

Отладчик поддерживает вычисление методов, в том числе перегруженных. Поэтому при вводе любого из следующих выражений отладчик вызовет нужную версию перегруженного метода:

Time.Set();
Time.Set(atime);

Вычисление метода в отладчике фактически вызывает и выполняет код этого метода. Если у метода есть побочные эффекты, вычисление метода в окне отладчика изменит состояние программы, что может привести к непредсказуемым результатам.

Если установить точку останова в перегруженном методе, расположение точки останова будет зависеть от способа задания функции. Если задать полную подпись (имя метода и полный список аргументов), отладчик установит только одну точку останова в указанной версии перегруженной функции. Если же задано только имя метода, поведение отладчика будет зависеть от параметров Visual Studio. Если флажок Использовать технологию IntelliSense для проверки имени функции не установлен, отладчик установит по одной точке останова в каждой версии перегруженного метода. В противном случае откроется диалоговое окно Выбор точек останова, в котором можно указать, в какие именно из перегруженных методов установить точку останова. Дополнительные сведения см. в разделе Практическое руководство. Установка точки останова в функции.

Создание новых анонимных методов не поддерживается отладчиком в данной версии Visual Studio.

Операторы

Отладчик правильно вычисляет большинство встроенных операторов, в том числе перечисленные ниже.

  • Реляционные операторы и операторы равенства: (expr1 > expr2, expr1 < expr2, expr1 <= expr2, expr1 => expr2, expr1 == expr2, expr1 != expr2).

  • Логические операторы: (expr1 && expr2, expr1 || expr2, expr1 ? expr2 : expr3).

  • Арифметические операторы: (expr1 + expr2,expr1 - expr2, expr1 * expr2, expr1 / expr2, expr1 % expr2 ).

  • Логические операторы: (expr1 & expr2, expr1 ^ expr2, expr1 | expr2 ).

  • Операторы сдвига: (expr1 >> expr2, expr1 << expr2 ).

  • Операторы присваивания: ( lvalue = expr2, lvalue *= expr2lvalue /= expr2, lvalue %= expr2, lvalue += expr2, lvalue -= expr2, lvalue <<= expr2, lvalue >>= expr2, lvalue &= expr2, lvalue ^= expr2, lvalue |= expr2).

  • Унарные операторы: ( +expr1, - expr1, expr1++, ++expr1, expr1--, --expr1).

Перегруженные операторы

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

В частности, допустимы перегруженные инфиксные операторы +, -, /, % и &.

  • expr1 + expr2

  • expr1expr2

  • expr1 / expr2

  • expr1 % expr2

  • expr1 & expr2

Перегруженные инфиксные операторы =, &&, & и || не работают.

  • expr1 = expr2

  • expr1 && expr2

  • expr1 & expr2

  • expr1 || expr2

Перегруженные инфиксные операторы <<И>> не работают, если оба операнда являются переменными класса:

  • object1 <<object2

  • object1 >> object2

Перегруженные префиксные операторы +, -, ++, --, ! и ~ поддерживаются.

  • +expr1

  • -expr1

  • ++expr1

  • --expr1

  • !expr1

  • ~expr1

Перегруженные постфиксные операторы ++ и – поддерживаются.

  • expr1++

  • expr1--

Перегруженные индексаторы поддерживаются:

  • expr1[expr2]

Строки

Отладчик распознает оператор индексирования, если он применяется к строкам или массивам. Например, в отладчике можно ввести следующее:

"hello world"[0]

В окне Контрольное значение появится правильное значение:

'h'

В C#, в отличие от C/C++, отладчик допускает редактирование значения строки. Кроме того для строки можно использовать оператор Length:

mystring.Length 

либо

"hello world".Length

В C# можно объединять строки:

"hello" + "world"

Приведение типов

В отладчике поддерживаются простые выражения приведения типов:

(A)x

Приведение типов с использованием указателей в отладчике не поддерживается.

Операторы "typeof" и "sizeof"

Отладчик поддерживает операторы typeof и sizeof путем преобразования их в эквивалентную функцию .NET Framework.

typeof ( выражение )

преобразуется в:

System.Type.GetType( выражение )

Затем отладчик вычисляет уже преобразованное выражение.

Отладчик поддерживает оператор sizeof.

Вычисление свойств

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

WebMethods

Вызов веб–методов в окнах отладчика не поддерживается.

См. также

Другие ресурсы

Выражения в отладчике

Справочник по C#