Странный вопрос о нулевом условии?

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; }
    }
}

person ahdung    schedule 14.06.2020    source источник
comment
Похоже на артефакт отладки. a4 на самом деле не null, но отладчик показывает, что это так, когда вы наводите курсор. Если вы позволите выполнению продвинуться еще на одну строку, отладчик догонит его. Если вы на самом деле пытаетесь использовать a4, оно правильно не равно нулю, даже если отладчик показывает обратное. Стоит сообщить об ошибке.   -  person GSerg    schedule 14.06.2020
comment
Или, скорее, a4 действительно имеет значение null в точке непосредственно перед выполнением следующей строки (что неверно), но становится не нулевым, когда вы начинаете выполнять следующую строку. т.е. если у вас есть var a4 = bClass?.Prop; Console.WriteLine(a4);, он выведет System.Object на консоль, но если вы поставите точку останова в WriteLine и выполните Console.WriteLine(a4) из непосредственного окна, он выведет на консоль null. Во всех случаях все окна переменного отображения отображают нуль для значения a4.   -  person GSerg    schedule 14.06.2020
comment
Нет, он также равен нулю в реальном проекте во время выполнения, вызывая проблему, поэтому я обнаружил эту проблему.   -  person ahdung    schedule 14.06.2020
comment
Обновление версии фреймворка, кажется, исправляет это.   -  person GSerg    schedule 14.06.2020
comment
Да, измените цель на .netfx 4.0, это сработало, но я не могу сделать это в проекте, я сообщу команде VS, надеюсь, они это исправят. Спасибо.   -  person ahdung    schedule 14.06.2020
comment
Почему вы используете Framework 2.0?   -  person Zohar Peled    schedule 14.06.2020
comment
Сообщено на github.com/dotnet/roslyn/issues/45165.   -  person GSerg    schedule 14.06.2020
comment
@ZoharPeled Я все еще поддерживаю старый проект рабочего стола в .net2.0, работаю в Windows XP, и все работает хорошо, никаких изменений, никаких затрат.   -  person ahdung    schedule 14.06.2020
comment
@ahdung .Net framework 2.0 давно не поддерживается, я не могу представить, что они что-то в нем исправят. А по поводу незачем менять, видимо есть, иначе бы вы тут не задавали вопросов.   -  person JonasH    schedule 14.06.2020
comment
@ahdung, ты имеешь в виду, никаких прямых затрат. Однако есть скрытые затраты — ваше время, например, может быть сокращено, если бы вы работали с более современным техническим стеком. Кроме того, последняя поддержка может быть немного опасной...   -  person Zohar Peled    schedule 14.06.2020
comment
@ZoharPeled Та же проблема существует в версиях 3.0 и 3.5. Кроме того, иногда в более новых версиях фреймворков возникают новые проблемы, которых раньше не было, и is-unable.html" rel="nofollow noreferrer">не исправляйте в дальнейшем, поэтому безопасным выбором будет использование старой версии.   -  person GSerg    schedule 14.06.2020
comment
@GSerg Я не согласен - однако у него есть свои издержки, даже если они иногда скрыты.   -  person Zohar Peled    schedule 14.06.2020
comment
@ZoharPeled Ты не ошибаешься, я тоже, могу только сказать, что это сложный выбор.   -  person ahdung    schedule 14.06.2020


Ответы (1)


Странный вопрос о нулевом условии?

На самом деле проблема связана со старым net framework 2.0.

Мы также проверили ту же проблему, что и вы описали. Поскольку мы ничего не можем здесь сделать, Я сообщил об этой проблеме на нашем форуме DC. Смотрите мою ссылку.

Вы можете проголосовать, добавить любую подробную информацию или прокомментировать здесь, если я не подробно остановился на проблеме.

Любой, кто интересуется этой проблемой, предварительно просмотрит ее, а затем проголосует за нее, чтобы она привлекла большое внимание со стороны Microsoft.

person Mr Qian    schedule 16.06.2020
comment
спасибо, я проголосовал, и я сообщил еще об одном, также используйте обратную связь VS, но я не могу получить URL-адрес, как вы его получите? - person ahdung; 17.06.2020
comment
Вы можете ввести эту ссылку, а затем войти в свою учетную запись, после чего вы сможете увидеть ссылку в разделе «Мой отзыв» из вашей учетной записи. - person Mr Qian; 17.06.2020