• NullReferenceException при сравнении содержимого ComboBoxItem?

    ComboBoxItem lbi = ((sender as ComboBox).SelectedItem as ComboBoxItem);

    В переменной lbi может находиться null, если ничего не выбрано, т.к. as возвращает null, если преобразование не удалось.

    Ниже Вы пытаетесь получить доступ к полю Content у null. Об этом компилятор и сообщает.

    Решение: нужно добавить проверку на null перед использованием lbi
    Ответ написан
    Комментировать
  • StackOverflowException в свойствах?

    Android97
    @Android97
    Бэкенд и немного фронтенд разработчик
    Создайте private поле, назовите его допустим String[] _savesName.
    Далее перепишите свойство:
    public String[] SavesName
            {
                get => _savesName;
                set
                {
                    _savesName = value;
                    cbSaves.Items.Clear();
                    if (value != null) cbSaves.Items.AddRange(value);
                }
            }
    Ответ написан
    Комментировать
  • Инсталлятор для своего приложения со встроенным дистрибутивом .NET?

    @akass
    Developer
    Wix
    Ответ написан
    Комментировать
  • Как реализованы порталы в игре Portal?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Честные порталы делать очень сложно, нужно хорошо понимать физику и весь пайплайн рендера. Есть очень много граничных случаев, каждый из которых нужно отдельно поддерживать: портал внутри портала, пересечение границ внутреннего и внешнего портала, несколько внутренних порталов, повороты плоскости портала, перемещение предметов, тени и освещение, прозрачные материалы и т. п. Есть две основные техники реализации отрисовки порталов: через рендер текстуры и стенсильный буфер.

    Порталы на рендер текстурах делаются проще, но они дороже по производительности, даже на простой геометрии несколько порталов могут оказаться непосильной задачей для компьютера. Основной принцип следующий: когда вы смотрите на портал, на другой стороне портала камера рисует картинку в текстуру, эта текстура натягивается на плоскую геометрию, и со стороны кажется, будто бы через дырку видно другую часть сцены. Примитивную реализацию такой схемы можно собрать руками в редакторе, но дальше начинаются сложности. Если у конечного портала "за спиной" будет геометрия, она попадёт во вьюпорт камеры и будет странно смотреться. Чтобы это предотвратить нужно ближнюю плоскость отсечения у камеры сдвигать в плоскость портала с помощью CalculateObliqueMatrix. Для вычисления положения камеры и пересчёта матрицы есть удобный колбэк OnRenderObject. После корректировки матрицы порталы будут смотреться более-менее корректно, но будут всплывать всевозможные косяки при перемещении через плоскость портала из-за буфера глубины и nearClipPlane основной камеры.

    Стенсильные порталы будут работать сильно быстрее, но для их реализации нужно хорошо шарить в шейдерах. Расписывать их работу подробно не буду, в целом они делаются точно так же, только трюки с рендер текстурами заменяются на трюки с буферами, предлагаю лучше почитать пару полезных статей на тему: раз и два. В контексте юнити всё немного сложнее, чем на чистом OpenGL, потому что нет прямого доступа ко всем буферам и для получения похожего результата придётся немного поизвращаться. Потенциально облегчить задачу может низкоуровневое API, но у меня не получилось добиться хороших результатов без потери качества картинки. Я возлагаю большие надежды на ScriptableRenderLoop, если судить по документации, это как раз то, что нужно.

    Прошу заметить, что всё вышесказанное касается чисто графической части, для простейшего случая, когда мы имеем FPS камеру без анимаций, без дополнительных механик, которая просто ездит по уровню и может заглядывать в порталы. Что уж говорить про миллион потенциальных багов, если вы захотите включить рядом с порталом систему частиц или взять в руки кубик. Посему советую либо купить плагин и довольствоваться тем, что он умеет, либо приготовиться потратить несколько месяцев на разработку своей портальной системы. И в том и другом случае ограничения движка не позволят вам в разумные сроки получить Portal, в лучшем случае это будет Narbacular Drop.
    Ответ написан
    Комментировать
  • Превышение объёма памяти в C#?

    @none7
    Если выводить в файл это единственное, что нужно делать с данными, то лучше генерировать их по необходимости. Так памяти много не понадобиться.
    public static IEnumerable<string> GetNumbersRange (int numberLength, int start, int end)
    {
        string format = "D" + numberLength;
        for (int i = start; i < end; i++)
            yield return i.ToString(format);
    }
    
    public static IEnumerable<string> GetOperatorNumbers(IEnumerable<string> operators, IEnumerable<string> numbers, int countryCode)
    {
        string Country = "";
        if (countryCode > 0)
        {
            Country = DATA.Code[countryCode].ToString();
        }
    
        foreach (var op in operators)
            foreach (var num in numbers)
                yield return Country + op + num;
    }
    
    File.AppendAllLines("file.txt", GetOperatorNumbers(...));
    Ответ написан
    2 комментария
  • .NET неоправдано сжирает память?

    ayazer
    @ayazer
    Sr. Software Engineer
    1) алгоритмы сжатия изпользуют доп. память для генерации словарей. Размер словаря будет зависеть как от алгоритма сжатия, так и от данных которые надо сжать.
    2) для того чтоб освободить память от кучи хлама - можно сделать GC.Collect для инициализации сборщика мусора. В данном случае прийдеться делать GC.Collect(2), что достаточно дорогая операция.

    кроме того, следует помнить про нюансы сборки мусора для LOH. В отличии от SOH, для LOH не будет проводиться дефрагментация данных в памяти, а CLR будет просто пытаться переиспользовать освободившиеся куски. Потому вполне возможна ситуация когда память в куче вроде как есть, но CLR продолжает ее выделять для новых обьектов.
    Ответ написан
  • Как разобраться в этой терминологии?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Благодаря тому, что программирование, это не идеология, не мифология, а вполне себе прекладная научная дисциплина, вся терминология в нем изначально предельно точная и информативная. В любом термине (кроме некоторых маркетинговых мемов) обычно содержится почти полный ответ на вопрос: "а что это такое", для понимания которого не нужно ничего запоминать - достаточно анализировать слова и синтезировать смысл абстракции по аналогии с предметами реального мира :) Однако, есть два момента.

    Первый: терминология исторически англоязычная и всяческие попытки переводов чаще вредят, чем помогают понять суть. (Мне, например, пришлось напрячь Гугл, чтоб удостовериться, что под "шлюзом" Вы действительно подразумеваете "pattern gateway", а не что-то там еще).
    Второй: термины часто обозначают не конкретные сущности, а абстракции. (Если вдруг значения последних двух слов понятны только на уровне смутного ощущения, разберитесь, что они конкретно означают... абстракция - это не "нечто туманное и заумное", а совсем другое :) ) Соответственно, для толкования этих терминов нужно использовать абстрактное мышление. Как?

    Например, для того же шлюза... шлюз бывает между двумя реками с разным уровнем... да, там есть выше - ниже. Однако, бывает между двумя отсеками космического корабля (хорошо - там все еще может быть разное давление), а бывает между толпой пассажиров в аэропорту и выходом к самолету (давление толпы?)... или, между локальной сетью и внешней, и т.д. Если задуматься, почему все это называют таким словом, легко понять, что суть понятия не столько в перепаде (уровней, давлений и т.д.), а, наверное, в том, что "это такое нечто, только через которое можно попасть/выйти из одного в другое". .. оно же, кстати, соответствует буквальному переводу слова "gateway" - "выход наружу"...

    И - сюрприз(!) - именно в этом и заключается суть паттерна. А вот, для сравнения, его формальное определение: "Объект, который инкапсулирует доступ к внешней системе и ресурсу." Решайте для себя сами, что лучше - знать английский, запоминать такие определения или один раз понять смысл аналогии, только учтите, что у всех слов в определениях тоже есть совершенно конкретный, точный смысл, который нужно знать или уметь находить - иначе определение ничего не объяснит, а только еще больше запутает :)

    Далее... как его "сделать в коде"? А фиг его знает! Как удобнее для проектируемой системы, так и делайте. Может, это будет один класс, может микросервис, а может вообще железяка на FPGA. Паттерн не дает никаких готовых рецептов (типа, взять три грузовика бетона, выкопать яму глубиной 5 метров и пр.) - он просто говорит, что чем всем частям системы "лазить наружу" как попало, лучше это дело сконцентрировать в одном месте. И, кстати, патерн не является "современным стандартом" и, вообще, стандартом! Это просто обобщенный опыт поколений разработчиков систем. Не более, чем соображение мыть руки перед едой... если зачем-то нужно, можно и не мыть, но если нет какой-то осознанной мотивации, то мыть в большинстве случаев - лучше :)

    Идем дальше... интерфейс. Что это такое? Формочка с кнопочками и чекбоксиками? А может, разъем USB? А может, код на каком-нибудь ЯП? Что между всем этим общего? Да очень просто! Интерфейс, это набор правил и соглашений о том, как пользоваться какими-то функциями того, что предоставляет этот интерфейс :)

    Вот и все! В ИТ-шной терминологии нет никакой магии и никакого сакрального смысла. Для понимания достаточно знать ТОЧНОЕ значение довольно небольшого количества слов и для любого непонятного термина всегда задавать два простых вопроса: "что это значит" и "почему", и находить на них ответы. И все туманное и странное быстро становится простым и понятным :)
    Ответ написан
    2 комментария
  • Какой компилятор и дебаггер C# на mac?

    Kr0nic
    @Kr0nic
    Пишу код за еду
    Виртуалка - Windows - Visual Studio
    Все остальное изврат
    Ответ написан
    4 комментария
  • Ресурсы на русском из мира .net?

    Applez
    @Applez
    Разраб
    Настоятельно рекомендую подтянуть технический английский. Это не так сложно, а в развитии навыков поможет очень сильно.
    Ответ написан
    Комментировать
  • Возможно ли сделать switch case по регулярному выражению?

    @dmitryKovalskiy
    программист средней руки
    switch case ищет соответствие переменной string и ее возможное значение в case. Что вы хотите сопоставить? Что в переменной string хранится какое-то регулярное выражение? Или что string соответствует одному из регулярных выражений? Если второе, то ваш путь if else if.
    Ответ написан
    4 комментария
  • Обязательно ли специалисту по ИБ знание веб-разработки?

    Jump
    @Jump
    Системный администратор со стажем.
    Нужно ли директору службы безопасности атомной электростанции знать как выращивают бананы?
    ИБ и Веб разработка никак не связаны и не имеют ничего общего.
    Ответ написан
  • Какую литературу по С# лучше всего почитать?

    AnnTHony
    @AnnTHony
    Интроверт
    Ответ написан
    Комментировать
  • С#. Почему локальным переменным, определенным в методе, необходимо задавать начальное значение, а полям класса можно не задавать?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    И там и там можно не задавать, нужно понимать что вы хотите сделать.
    using System;
    
    public class Test<T>
    {
        // Перед вызовом конструктора выставится в default(int), то есть 0 
        private int i;
    
        // Для ссылочного типа default(object) будет null
        private object obj;
    
        // default(T)
        private T t;
    
        public Test()
        {
            // Не инициализированная переменная
            int foo;
    
            // error CS0165: Use of unassigned local variable 'foo'
            Console.WriteLine(foo.ToString());
    
            foo = 0;
    
            // У foo появилось значение, теперь переменной можно пользоваться
            Console.WriteLine(foo.ToString());
    
            int bar;
    
            // error CS0165: Use of unassigned local variable 'bar'
            Ref(ref bar);
    
            // Для ref нужна инициализированная переменная
            Ref(ref foo);
    
            // Для out не нужна
            Out(out foo);
            Out(out bar);
        }
    
        private void Ref(ref int r)
        {
            r = 0;
        }
    
        private void Out(out int o)
        {
            o = 0;
        }
    }

    Подробнее читайте в MSDN здесь и здесь.
    Ответ написан
    Комментировать
  • С#. Почему локальным переменным, определенным в методе, необходимо задавать начальное значение, а полям класса можно не задавать?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Потому что поле класса автоматически инициализируется дефолтным значением перед выполнением конструктора.
    class Test
    {
        public int a = 10;
        public int b; // автоматически будет 0
        public int с; // тут сначала будет 0, потом в конструкторе станет 20
        public Test()
        {
            c = 20;
        }
    }
    Ответ написан
    Комментировать
  • Как вы понимаете, когда и какой метод необходимо использовать?

    В общем меня это сводит с ума и я не понимаю, неужели все сводится к тому,чтобы брать и гуглить?

    Данная методология программирования называется Stack Overflow Driven Development, и практикуется даже программистами экспертного уровня.
    Ответ написан
    Комментировать
  • Как объединить и разъединить byte[]?

    Я бы сделал это при помощи сериализации (класс BinaryFormatter).

    Создаём класс, который содержит картинку и текст, пихаем туда твою картинку и текст, сериализуем всё это при помощи BinaryFormatter.Serialize( ) в MemoryStream, получаем из него массив байт.

    При получении массива байт, создаём MemoryStream из массива, десериализуем из него при помощи BinaryFormatter.Deserialize( ) - получаем класс с нашей картинкой и текстом
    Ответ написан
    Комментировать
  • Как отключить дисковый кеш в Opera 34?

    @Dark_O
    Anykey
    Попробуйте с этим параметром --disk-cache-dir=null
    Ответ написан
    1 комментарий
  • Доступ из другого потока, зависание Invoke, как решить?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Вопрос в том, в каком потоке вызывается эта функция.
    Вместо this.Invoke поставьте Dispatcher.BeginInvoke.
    Ответ написан
    Комментировать