Интерполяция нечетной строки. Исключение нулевой ссылки при отладке.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Интерполяция нечетной строки. Исключение нулевой ссылки при отладке.

Сообщение Anonymous »

ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ (потому что это просто теряется в причудливом мире)

Хорошо, теперь я совершенно потрясен. Я заметил в своем обновлении, что мне не хватает точки после {b} в строке 7. Поэтому, следуя за точностью, я добавил ее.
!!!Теперь строка 7 также терпит неудачу, когда вы в нее вступаете!!!
Что за черт????
Итак, теперь Program.cs с еще более сумасшедшими результатами...

Код: Выделить всё

try
{
var a = "a";
var b = "b";
var r1 = "r";
var r1x = $"r2x1={a}.{b}.{r1}";  // < Line 6 - F10 here will give you an exception
var r1y = $"r2x1={a}.{b}" + r1;  // < Line 7 - F10 here will execute just fine!
var r1z = $"r2x1={a}.{b}." + r1; // < Line 8 - F10 here will give you the exception!!!
var r1a = $"r2x1={a}.{b}{r1}";   // < Line 9 - F10 here will give you an exception
Console.WriteLine(r1x);

}
catch (NullReferenceException e)
{
Console.WriteLine(e);
}
Обновление
Я еще немного повозился с этим, и проблема, похоже, напрямую связана с интерполяцией строк. В обновленном файле Program.cs непосредственно ниже добавление точки останова в строке 6 (

Код: Выделить всё

var r1x = ...
) создаст исключение, если вы нажмете на него клавишу F10, и будет успешно запущен, если вы нажмете на него клавишу F5. Однако также имеет точку останова в строке 7 (

Код: Выделить всё

var r1y = ...
) с радостью позволит вам обойти его, нажав F10!

Код: Выделить всё

try
{
var a = "a";
var b = "b";
var r1 = "r";
var r1x = $"r2x1={a}.{b}.{r1}"; // < Line 6 - F10 here will give you an exception
var r1y = $"r2x1={a}.{b}" + r1; // < Line 7 - F10 here will execute just fine!
Console.WriteLine(r1x);

}
catch (NullReferenceException e)
{
Console.WriteLine(e);

}
Оригинальный вопрос ниже
Program.cs:

Код: Выделить всё

try
{
var a = "a";
var b = "b";
var r1 = "r";
var r2 = "r";
r1 = $"r1={a}.{b}.{r1}";
r2 = $"r2={a}.{b}.{r2}";
Console.WriteLine(r1);
Console.WriteLine(r2);

}
catch (NullReferenceException e)
{
Console.WriteLine(e.StackTrace);
}
Этот глупый фрагмент кода будет работать нормально, если вы не выполняете построчное выполнение с помощью отладчика.
Однако размещение точка останова в строке 8 (

Код: Выделить всё

r2 = ...
) перенесет вас в ловушку с NullReferenceException и

Код: Выделить всё

System.NullReferenceException: Object reference not set to an instance of an object.
at System.Buffer.Memmove(Byte& dest, Byte& src, UIntPtr len)
at System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendStringDirect(String value)
at Program.$(String[] args) in /Users/rambler/tmp/Four Weeks/why/ConsoleApp1/Program.cs:line 8
Выполнение точки останова и строки 7 приведет к одному и тому же исключению. Однако Отсутствие точки останова ни в одной из строк приведет к выполнению без исключений.
Я пробовал несколько вариантов r1 = ... и r2 = ..., некоторые из которых используют интерполяцию строк с помощью r1 (или r2 соответственно), и мне трудно определить результаты.
Каждый раз код выполняется, если я не пытаюсь отладить эту конкретную строку.
До сих пор это было на моем Mac с использованием как Rider, так и Код Visual Studio. Позже собираюсь запустить Windows, чтобы посмотреть, смогу ли я воспроизвести ее и там.
Эта проблема обнаружилась в гораздо более крупном приложении, которое я пишу, и я наконец-то удалось ограничиться этим.
.net 7.0.203

Подробнее здесь: https://stackoverflow.com/questions/760 ... -debugging
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Исключение нулевой ссылки c# с System.Speech.Synthesis при использовании в большом приложении
    Гость » » в форуме C#
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость
  • Найти общее количество подстрок нечетной длины
    Anonymous » » в форуме JAVA
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Найти общее количество подстрок нечетной длины
    Гость » » в форуме JAVA
    0 Ответы
    40 Просмотры
    Последнее сообщение Гость
  • Как элегантно чередовать два списка нечетной длины?
    Anonymous » » в форуме Python
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Как элегантно чередовать два списка нечетной длины?
    Anonymous » » в форуме Python
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»