Подтвердить что ты не робот

Почему я не могу использовать новую строку в отладчике?

Следующий код успешно компилируется:

string foo = new string(new char[] { 'b', 'a', 'r' });

Следующий код не может быть оценен, если он вставлен в окно просмотра или в окне "Немедленное":

new string(new char[] { 'b', 'a', 'r' });

Сообщение об ошибке:

'new string(new char[] { 'b', 'a', 'r' })' threw an exception of type 'System.ArgumentException'
    base {System.SystemException}: {"Only NewString function evaluation can create a new string."}
    Message: "Only NewString function evaluation can create a new string."
    ParamName: null

Почему это происходит?

4b9b3361

Ответ 1

Оценщик выражения С# использует интерфейсы ICorDebugEval и ICorDebugEval2 для взаимодействия с CLR во время сеанса отладки. Этот интерфейс не позволяет вызывать любой конструктор типа string. Вместо этого он заставляет все вызовы создавать новый экземпляр string для прохождения метода ICorDebugEval::NewString. С# EE не имеет особого случая string в EE, поэтому он пытается вызвать конструктор напрямую и терпит неудачу.

Обратите внимание: вы не увидите это исключение с VB.Net в Visual Studio 2010. Это вызовы специальных случаев для конструкторов string, оценивая аргументы и перенаправляя полученный объект string на ICorDebugEval::NewString