• Считается ли моветоном отсутствие переноса для открывающей фигурной скобки?

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

    @cicatrix Автор вопроса
    было бы большой ошибкой думать
    Василий Банников, на SO нашёл вот такой костыль:
    public class HappyGreeter : IGreeter
    {
        private interface IWorkAround : IGreeter
        {
            public void SayHello(string name)
            {
                (this as IGreeter).SayHello(name);
                System.Console.WriteLine("I hope you're doing great!!");
            }
        }
    
        private class WorkAround : IWorkAround {}
    
        public void SayHello(string name)
        {
            ((IWorkAround)new WorkAround()).SayHello(name);
        }
    }
    Ответ написан
  • Почему возвращается \0 при вводе русских букв в консоли C#?

    @cicatrix Автор вопроса
    было бы большой ошибкой думать
    Доходило долго, но я справился.
    Внутри строки в нынешнем шарпе хранятся в utf-16, а в консоли - в utf-8.
    чтобы работало, надо указать явно кодировку utf-16:
    Console.InputEncoding = System.Text.Encoding.GetEncoding("utf-16");
    Console.WriteLine("Hello, World!");
    var ans = Console.ReadLine();
    Console.WriteLine(ans);

    Может, кому пригодится.
    Ответ написан
    Комментировать
  • WPF. Почему не стреляет PreviewMouseDown?

    @cicatrix Автор вопроса
    было бы большой ошибкой думать
    А ларчик просто открывался. Просто надо было сделать vh.IsHitTestVisible = false;
    Ответ написан
    Комментировать
  • Почему счётчик таймера на windows forms увеличивается на 2, а не на 1?

    @cicatrix
    было бы большой ошибкой думать
    У тебя скорее всего две подписки на Tick оформлено.
    Вот эта строчка у тебя в конструкторе:
    timer1.Tick += timer1_Tick;
    И ещё точно такая же, скорее всего, в Form1.Designer.cs присутствует. Убери одну из них
    Ответ написан
    Комментировать
  • Способы блокировки программ на фрилансе?

    @cicatrix
    было бы большой ошибкой думать
    Вынеси критичную часть бизнес-логики на внешний сервер. Это лучше, чем авторизация на сервере, потому что если перехватить запрос и подменить ответ сервера можно, то заменить работу критически-важного метода - нельзя. После оплаты можно скинуть плагин, делающий то же самое, только локально.
    Ответ написан
    Комментировать
  • Как подставить вместо foreign key значение?

    @cicatrix
    было бы большой ошибкой думать
    SQL JOIN - соединение таблиц базы данных
    https://function-x.ru/sql_join.html
    Ответ написан
    Комментировать
  • Все говнокодеры?

    @cicatrix
    было бы большой ошибкой думать
    Благими намерениями мостится дорога в ... говнокод.
    Вот здесь надо быстро, лень смотреть, зафигачу прямой запрос.
    Вот в этом классе сделаю это поле public. Тест провалился, хорошо, добавлю отдельный if для этого случая. А вот здесь какая-то хрень написана, ладно, напишу ещё один метод, делающий то же самое, но по-моему. Ой, а в этой либе фича новая. А вот тут жалуются, что медленно, пох, закэшируем данные... В общем, даже хорошо задуманный проект со временем обрастает вот этим вот всем. Ни разу не видел, чтобы было по-другому (видел, кривую архитектуру изначально, ещё видел полное отсутствие архитектуры как таковой).
    Ответ написан
    Комментировать
  • Как из byte[] звукового файла получить спектр с помощью FFT?

    @cicatrix
    было бы большой ошибкой думать
    Гугл в помощь, как говорится:

    Делай раз: Быстрое преобразование Фурье
    Делай два: Алгоритм Кули — Тьюки
    Ответ написан
    Комментировать
  • Как сделать сканирование COM-портов и добавление в ComboBox?

    @cicatrix
    было бы большой ошибкой думать
    В своё время делал перечисление последовательных портов так, но не уверен, что это есть хорошо.
    Тоже интересно было бы узнать, можно ли сделать поэлегантнее:
    using System.Management;
    
    public static Dictionary<string, ManagementBaseObject> EnumerateComPorts()
    {
        Dictionary<string, ManagementBaseObject> result = new Dictionary<string, ManagementBaseObject>();
        string[] ports = SerialPort.GetPortNames();
        foreach (string port in ports)
        {
            using (var entitySearcher = new ManagementObjectSearcher(
                "root\\CIMV2", $"SELECT * FROM Win32_PnPEntity WHERE Caption LIKE '%{port}%'"))
            {
                var matchingEntity = entitySearcher.Get().Cast<ManagementBaseObject>().FirstOrDefault();
                if (null != matchingEntity)
                {
                    result.Add(port, matchingEntity);
                }
            } // using
        } // foreach
        return result;
    } // EnumerateComPorts


    Далее, уже сделал Listener на нужный порт и ждал данные:
    public RS232Listener(string portname)
            {
                m_queue = new Queue<string>();
                try
                {
                    if (null != m_port)
                    {
                        m_port.Close();
                        m_port.Dispose();
                        GC.Collect();
                        GC.WaitForPendingFinalizers();
                    }
                    m_port = new SerialPort(portname, 9600, Parity.None, 8, StopBits.One);
                    m_port.DataReceived += this.M_port_DataReceived;
                    m_port.ErrorReceived += this.M_port_ErrorReceived;
                    m_port.Open();
                } // try
                catch(Exception ex)
                {
                    Logger.LogError("RS232Listener constructor", ex.Message, ex);
                    ErrorMessage = ex.Message;
                    ErrorState = true;
                }
            } // RS232Listener constructor
    Ответ написан
  • Как из массива получить слова начинающиеся с заглавной буквы и поместить их в list?

    @cicatrix
    было бы большой ошибкой думать
    https://onlinegdb.com/3ME6NWfmb
    using System;
    using System.Linq;
    
    class SplitToUpper {
      static void Main() {
          var input = "Это тестовое предложение, Некоторые из Слов начинаются с Заглавной буквы";
          var words = input.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
          var output = words.Where(w => char.IsUpper(w[0])).Reverse().ToArray();
          foreach(var word in output) 
            Console.WriteLine(word);
      } // Main
    } // class SplitToUpper


    Вывод:
    Заглавной
    Слов
    Некоторые
    Это
    Ответ написан
    Комментировать
  • Как обновить тип данных у в приложении в visual studio после редактирования в БД?

    @cicatrix
    было бы большой ошибкой думать
    Это решается форматированием вывода значений. Да и тип данных в базе менять было не обязательно.
    Ответ написан
    Комментировать
  • Бесконечный цикл, что за дичь?

    @cicatrix
    было бы большой ошибкой думать
    Цикл останавливается, это Paint вызывается каждый раз, когда форма отрисовывается.
    Поставил точку останова в Paint - отлично. Когда ты запустишь программу исполняться дальше, отрисовка должна будет произойти заново и снова вызовется Paint. И так будет каждый раз, когда окно будет скрыто или частично перекрыто.
    А обновлять текстбокс в Paint - за многие годы, ничего подобного видеть не доводилось. Вам удалось меня удивить.
    Ответ написан
    Комментировать
  • Что нужно и на каком уровне знать в математике чтобы читать Дональда Кнута?

    @cicatrix
    было бы большой ошибкой думать
    Если честно, думаю, что искусство программирования читают только, чтобы выпендриться. Практически же, никаких особых навыков книга не даёт. Да, как академический труд можно почитать, иногда даже интересно, горизонты расширяет, в целом. Но вот как программисту лично мне эта книга абсолютно ничего не дала.
    Ответ написан
    9 комментариев
  • Должен ли я запоминать это все?

    @cicatrix
    было бы большой ошибкой думать
    Гугл в помощь, как говорится, программист - это человек, который умеет гуглить. Всё помнить невозможно. Если часто пишешь и используешь, знания откладываются. Если давно чем-то не занимался, иногда забываются даже тривиальные вещи.
    Ответ написан
    Комментировать
  • Как написать юнит тест для ввода с клавиатуры?

    @cicatrix
    было бы большой ошибкой думать
    Пример, когда платят за строку кода :)
    Код абсолютно НЕ тестопригодный, вы постарались.
    На ввод с клавиатуры юнит-тест не нужен. Нужен юнит-тест на метод, который производит с этим вводом какие-либо действия. Основная логика у вас происходит именно в Threadmain() - методе, который ничего не принимает и ничего не возвращает, кроме возможных исключений.

    1. Зачем ввод с клавиатуры в отдельном потоке, да ещё и с очередью, если ReadLine() блокирующий метод.
    2. Convert.ToInt32() выдаст исключение, если аргументом будет строка, не содержащая цифры.
    3. num == "q" || num == "Q" - есть методы .ToLower(), ToUpper(). Название переменной num абсолютно нелогично, если оно не числовое.
    4. Ещё тестом надо покрыть PumpMessage(), чтобы проверить, выходит ли программа из цикла

    UPD: Вот рефактор, который делает более-менее то же самое, и его можно тестировать:
    using System;
    using System.Linq;
    using System.Collections.Generic;
    
    class Program {
    
      static List<int> _numbers = new List<int>();  
      static void Main() {
        while(UserInput(Console.ReadLine()));
        Console.WriteLine($"Sum is: {CalcSum(_numbers)}");
      }
      
      static bool UserInput(string input)
      {
          if(string.IsNullOrEmpty(input)) return false;
          if(!int.TryParse(input, out int number)) return false;
          _numbers.Add(number);
          return true;
      }
      
      static int CalcSum(IEnumerable<int> numbers)
      {
          return numbers.Sum();
      }
    }


    Тесты для UserInput
    UserInput получает на вход null и должен вернуть false
    UserInput получает на вход "" и должен вернуть false
    UserInput получает на вход что угодно, кроме числа и должен вернуть false
    UserInput на вход число и возвращает true

    Тесты для CalcSum
    Получает на вход пустой список и возвращает 0
    Получает на вход массив [1, 2] возвращает 3
    (ну для пущей надёжности можно ещё добавить проверку входящего аргумента на null) и проверить, выбрасывается ли исключение
    Ответ написан
  • Какое регулярное выражение использовать, что бы достать все подстроки начинающиеся с одного слова?

    @cicatrix
    было бы большой ошибкой думать
    Если нужно просто разделить, то подойдёт и string.Split();
    А вообще, парсить JSON регулярками, когда есть нормальные парсеры как-то странно, по меньшей мере.
    Ответ написан
  • ASP.NET Core 3.1 + IIS + Powershell SDK не работают команды Powershell, если веб-приложение запущено из IIS. Как исправить?

    @cicatrix
    было бы большой ошибкой думать
    По-моему, ваш случай:
    https://stackoverflow.com/questions/43283339/runni...
    Ответ написан
    Комментировать
  • Почему вызывает первую форму?

    @cicatrix
    было бы большой ошибкой думать
    Вот сейчас не поручусь за 100% верность, но при старте выполняется метод Show() для первой форме.
    Что там "под капотом" - не знаю, но у тебя код в Form_Load, который сам по себе форму не отображает. А поскольку она при старте приложения всё-таки показывается, то изменение видимости формы происходит уже после того, как отработает Load.

    Порядок событий такой:
    HandleCreated
    BindingContextChanged
    Load
    Control.VisibleChanged
    Activated
    Shown

    Попробуй перенести код в Shown. Думаю, в твоём случае, это поможет.
    А вообще, по уму надо бы из Main показывать сначала Form2 , а уж потом Form1 по результату.
    Ответ написан
    2 комментария
  • C# wpf как получить параметр маcтабировиния и разметка?

    @cicatrix
    было бы большой ошибкой думать
    Вручную задавай свойства FontSize
    Ответ написан
    Комментировать