ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ (потому что это просто теряется в причудливом мире)
Хорошо, теперь я совершенно потрясен. Я заметил в своем обновлении, что мне не хватает точки после {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 = ...
Код: Выделить всё
var r1y = ...
Код: Выделить всё
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 = ...
Код: Выделить всё
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
Я пробовал несколько вариантов r1 = ... и r2 = ..., некоторые из которых используют интерполяцию строк с помощью r1 (или r2 соответственно), и мне трудно определить результаты.
Каждый раз код выполняется, если я не пытаюсь отладить эту конкретную строку.
До сих пор это было на моем Mac с использованием как Rider, так и Код Visual Studio. Позже собираюсь запустить Windows, чтобы посмотреть, смогу ли я воспроизвести ее и там.
Эта проблема обнаружилась в гораздо более крупном приложении, которое я пишу, и я наконец-то удалось ограничиться этим.
.net 7.0.203
Подробнее здесь: https://stackoverflow.com/questions/760 ... -debugging