env: VS2017 v15.9.24, консольный проект .net framework 2.0 c#.
это очень простой консольный проект, никаких ссылок нет, все коды находятся в program.cs:
namespace ConsoleApp1
{
class Program
{
static void Main()
{
var b = new BClass { Prop = new object() };
new AClass(b);
}
}
public class AClass
{
BClass bClass;
public AClass(BClass b)
{
bClass = b;
var a1 = bClass; // not null
var a2 = bClass.Prop; // not null
var a3 = b?.Prop; // not null
var a4 = bClass?.Prop; // null, WHY???
; // set break point to here
}
}
public class BClass
{
public object Prop { get; set; }
}
}
a4
на самом деле неnull
, но отладчик показывает, что это так, когда вы наводите курсор. Если вы позволите выполнению продвинуться еще на одну строку, отладчик догонит его. Если вы на самом деле пытаетесь использоватьa4
, оно правильно не равно нулю, даже если отладчик показывает обратное. Стоит сообщить об ошибке. - person GSerg   schedule 14.06.2020a4
действительно имеет значение null в точке непосредственно перед выполнением следующей строки (что неверно), но становится не нулевым, когда вы начинаете выполнять следующую строку. т.е. если у вас естьvar a4 = bClass?.Prop; Console.WriteLine(a4);
, он выведет System.Object на консоль, но если вы поставите точку останова в WriteLine и выполнитеConsole.WriteLine(a4)
из непосредственного окна, он выведет на консоль null. Во всех случаях все окна переменного отображения отображают нуль для значенияa4
. - person GSerg   schedule 14.06.2020