2015-05-11 3 views
2

У меня есть этот код:название «подставляется» не существует в текущем контексте

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
namespace RegexTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string str = "The quick brown fox."; 
      string pat = "fox"; 
      Regex rgx = new Regex(pat, RegexOptions.IgnoreCase); 
      Match matches = rgx.Match(str); 
      Console.ReadKey(); 
     } 
    } 
} 

Это компилирует и работает без ошибок. У меня есть точка останова, установленная на Console.ReadKey(), потому что я хотел проверить совпадения переменных. Но я получил странное сообщение об ошибке, которое я ввел в заголовок этого потока. В Сети не было ясно, что это значит.

+0

Вы также можете напечатать значение 'matches' как:' если (matches.Success) \t { \t Console.WriteLine (matches.Value); \t} ' – Sybren

ответ

1

Эта переменная не используется, поэтому она была оптимизирована. Добавить что-то вроде этого, как временное решение:

int x = matches.GetHashCode(); 

В качестве альтернативы вы можете отключить оптимизацию временно или компиляции в режиме отладки.

+0

Это, кажется, выходит из сферы действия. –

+1

@HarveySpecter Точка останова находится на 'Console.ReadKey', поэтому она находится в области видимости. – BartoszKP

6

Если у вас есть кастрюля на Optimize Code, тогда переменная matches оптимизирована. Это обычно имеет место, если ваш текущий профиль сборки RELEASE. Измените его на DEBUG, тогда никакая оптимизация кода не используется, и вы можете получить доступ к требуемым переменным.

0

Вы можете снять флажок Оптимизированный код в свойствах решения.

Solution Properties > Build > Optimized Code 

enter image description here

+0

Я не делаю этого, ни предлагаю, чтобы это сделать, для вашей текущей отображаемой конфигурации, которая является «Release». –

+0

@xxMUROxx Я предложил работать с режимом Release On –

Смежные вопросы