Задать вопрос
  • Ошибка CS5001, как исправить?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    https://docs.microsoft.com/ru-ru/dotnet/csharp/mis...

    https://docs.microsoft.com/ru-ru/dotnet/csharp/pro...
    public static void Main() { }
    public static int Main() { }
    public static void Main(string[] args) { }
    public static int Main(string[] args) { }
    public static async Task Main() { }
    public static async Task<int> Main() { }
    public static async Task Main(string[] args) { }
    public static async Task<int> Main(string[] args) { }
    Ответ написан
    Комментировать
  • Возможно ли перенести проект C# на C++/CLI?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Ровно там же написано для чего используется C++/ CLI
    Для работы со старым кодом и для обхода некоторых ограничений более выкоуровневых языков.
    На cli пишите ресурсоемкую часть кода, все остальное в том числе и интерфейс пишите на C#.
    Это наиболее правильный путь.
    Ответ написан
    2 комментария
  • Как взять третье слово из строки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    как тоже самое сделать при помощи метода match?

    (str.match(/\S+/g) ?? [])[2]

    что будет быстрее?

    split, но вы этого не заметите
    Ответ написан
    Комментировать
  • Приложение выкидывает InvalidOperationException?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Вот я открыл статью и там первым делом делают захват микрофона, а у вас нет.
    Ответ написан
    1 комментарий
  • Можете объяснить как работает компаратор?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    const нужен потому, что если компаратор будет что-то в контейнере менять, у контейнера явно поедет крыша. Профессионалы вешают const (а еще лучше - constexpr) на любую сущность, которая не должна меняться по логике алгоритма.

    Ссылки передаются по той простой причине, что это избавляет от вызова конструктора копирования и деструктора, что может быть крайне критично для некоторых тяжелых объектов, или же будет блокировать компиляцию с кучей ошибок, если объект не позволяет себя копировать
    Ответ написан
    2 комментария
  • Исключение это и есть ошибка?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Ну а в чём моя ошибка, если ты заставляешь меня делить на ноль? Или просишь открыть меня файл, который ты почему-то не создал? Или так забил память, что мне её не хватило? Поэтому я тебе и сообщаю, об исключительной ситуации, разгребать последствия которой нужно тебе, а не мне - обычной функции. Возможно это у тебя ошибка. А мой код работает чётко.
    Ответ написан
    Комментировать
  • Исключение это и есть ошибка?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вот тут разжевано.
    https://stackoverflow.com/questions/912334/differe...

    По сути исключения это и есть ошибки, но некоторые мы можем обработать, на других мы ломаемся.
    Например WebException в принципе предсказуемо, у меня паршивый канал и я пробую еще раз, FormatException вывожу что то в лог.
    Просто Exception гашу все на уровне приложения, что бы его не разрушить, записываю в лог и предлагаю пользователю кнопки поругать меня или попробовать снова

    UPD
    Самое главное забыл
    https://docs.microsoft.com/ru-ru/dotnet/standard/e...
    Ответ написан
    Комментировать
  • Можно ли создать шаблон только для одного метода класса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Можно ли создать шаблон только для одного метода класса?

    Да, можно. В чём сложность взять и попробовать?
    class C {
    public:
        template<typename T>
        void f(T v)
        {
            ...
        }
    };
    Ответ написан
    2 комментария
  • Как заставить работать скрипт только на мобилках?

    staik
    @staik
    Front-end developer
    Добрый вечер.

    Если вы работаете с jquery, то все просто:
    if($(window).width() < 992){
        //function
    }
    $(window).resize(function(){
        if($(window).width() < 992){
            //function
        }
    })


    Если работаете с js, то там немного по-другому

    if(window.innerWidth < 992){
        //do function
    }
    window.addEventListener("resize", function(){
        if(window.innerWidth < 992){
            //do function
        }
    }, false);


    Должно по идее работать
    Ответ написан
    1 комментарий
  • Зачем нужный абстрактные методы?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Ответ написан
    Комментировать
  • Перегрузка методов - это не более, чем синтаксический сахар?

    GavriKos
    @GavriKos
    Перезагрузка методов - это выдуманный вами термин.
    А то что вы описали - это перегрузка.

    И нет, это не совсем синтаксический сахар. А все таки часть архитектуры и местами инкапсуляции сложных методов (когда количество аргументов меняется).

    К тому же это еще и к синтаксису так себе относится - это будут разные методы со всех точек зрения.
    Ответ написан
    1 комментарий
  • Посоветуй'те курс по разработке движка блога на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Чем отличаются записи по созданию объекта класса?

    freeExec
    @freeExec
    Участник OpenStreetMap
    A a2 - это ничто, вы просто описали сигнатуру переменной, считайте просто футляр от скрипки. Пока вы не создали объект (скрипку) через new, который вы положите в футляр, вы не можете ни чего с футляром делать. Нельзя сыграть на скрипке a2.X = 1; если её нет.
    Ответ написан
    Комментировать
  • Как получить значение checkboxa из шаблона Listboxa?

    @WinnerIT
    Программист и фотограф-любитель
    состояние CheckBox у Вас хранится в IsCalc.
    Если Вы хотите запись по изминению значения IsCalc, то это делается в set:
    bool _isCalculated;
    public bool IsCalc 
    get
    {
      return _isCalculated;
    }
     set{
       if (value != _isCalculated)
    {
       _isCalculated = value;
     SaveMeInDbMethod(_isCaluclated);
     // TODO: посмотреть в гугл NotifyPropertyChanged или RaisePropertyChanged() в VievModel
     NotifyPropertyChanged("IsCalc");
     }


    Если Вы хотите по клику на CheckBox, то ищите в гугл как привязать Command к EventTrgger. На пример.
    Ответ написан
    2 комментария
  • Как найти самое часто используемое слово в тексте?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    var text = "test the text test on test platform";
    var words = text.Split(' ');
    var stat = words.Distinct().ToDictionary(word => word, word => words.Count(x => x == word));
    foreach (var (key, value) in stat) Debug.WriteLine($"Word: {key} count: {value}");
    Ответ написан
  • Стоит ли использовать здесь перечисления?

    Collin
    @Collin
    Стоит, так будет удобнее и понятнее.
    namespace TryEnum
    {
        enum DownloadType
        {
            Video, Audio, Custom, Unknown, Default
        }
        enum ForceIpProtocol
        {
            IPv4, IPv6
        }
        enum ProxyProtocol
        {
            HTTPS, HTTP, SOCKS4, SOCKS5
        }
    }


    А использовать вот так:
    5ed7670d68591771166057.png

    А по поводу интерфейсов... Интерфейсы не должны быть вместо классов; класс реализует интерфейс (выглядит синтаксис как наследование class ClassName : IClassName, но это не совсем наследование, там немножко другая реализация). И интерфейс нужен в том случае, если нужно реализовать полиморфизм в коде и/или что бы упростить доступ к публичным полям в классах, которые реализуют этот интерфейс.
    Например: у нас есть много классов с разными реализациями, но их всех объединяют одни и те же свойства (к приеру свойства public string Name ( get; set; ); public int Age( get; set; ); и тд...). Интерфейс в данном случае нужен для того, что бы через него мы получали доступ ко множественному поведению, при помощи разных классов, содержащих одноименные свойства, не плодя при этом код.

    Для наглядности:

    у нас есть метод Create(); в котором мы хотим создавать новых людей

    static void Create()
            {
                // empty...
            }


    Есть разные классы, которые создают Human и реализуют интерфейс IHuman

    class SimpleHuman : IHuman
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public SimpleHuman()
            {
                Name = "Generic human...";
                Age = 20;
            }
            public SimpleHuman(string name) : this()
            {
                Name = name;
            }
            public SimpleHuman(string name, int age) : this()
            {
                Name = name;
                Age = age;
            }
        }


    class CoolHuman : IHuman
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public CoolHuman()
            {
                Name = "BOB!";
                Age = 20;
            }
            public CoolHuman(string name) : this()
            {
                Name = name;
            }
            public CoolHuman(string name, int age) : this()
            {
                Name = name;
                Age = age;
            }
        }


    interface IHuman
        {
            string Name { get; set; }
            int Age { get; set; }
        }


    И теперь, благодаря реализации интерфейса в этих классах мы можем удобно использовать этот самый интерфейс, например:
    class Create
        {
            public IHuman Human { get; set; }
            public Create()
            {
                Human = new CoolHuman();
            }
            public void Hello()
            {
                Console.WriteLine("Hello, {0}. Today you are {1} years old", Human.Name, Human.Age);
            }
        }


    Конкретно в вашем случае интерфес не нужен.
    Ответ написан
    4 комментария
  • Как получить код завершения программы?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вот примерный код будет ловить все, и даст вам 5 секунд что то сделать.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading;
    
    namespace TestTrapCtrlC{
        public class Program{
            static bool exitSystem = false;
    
            #region Trap application termination
            [DllImport("Kernel32")]
            private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add);
    
            private delegate bool EventHandler(CtrlType sig);
            static EventHandler _handler;
    
            enum CtrlType {
             CTRL_C_EVENT = 0,
             CTRL_BREAK_EVENT = 1,
             CTRL_CLOSE_EVENT = 2,
             CTRL_LOGOFF_EVENT = 5,
             CTRL_SHUTDOWN_EVENT = 6
             }
    
            private static bool Handler(CtrlType sig) {
                Console.WriteLine("Exiting system due to external CTRL-C, or process kill, or shutdown");
    
                //do your cleanup here
                Thread.Sleep(5000); //simulate some cleanup delay
    
                Console.WriteLine("Cleanup complete");
    
                //allow main to run off
                 exitSystem = true;
    
                //shutdown right away so there are no lingering threads
                Environment.Exit(-1);
    
                return true;
            }
            #endregion
    
            static void Main(string[] args) {
                // Some biolerplate to react to close window event, CTRL-C, kill, etc
                _handler += new EventHandler(Handler);
                SetConsoleCtrlHandler(_handler, true);
    
                //start your multi threaded program here
                Program p = new Program();
                p.Start();
    
                //hold the console so it doesn’t run off the end
                while(!exitSystem) {
                    Thread.Sleep(500);
                }
            }
    
            public void Start() {
                // start a thread and start doing some processing
                Console.WriteLine("Thread started, processing..");
            }
        }
     }
    Ответ написан
    Комментировать
  • Как превратить плоский массив в дерево?

    0xD34F
    @0xD34F Куратор тега JavaScript
    попытался решить все через рекурсию

    Рекурсией конечно можно:

    const createTree = (data, idKey, parentKey, parentId) =>
      data.reduce((acc, n) => (parentId === n[parentKey] && acc.push({
        ...n,
        children: createTree(data, idKey, parentKey, n[idKey]),
      }), acc), []);
    
    
    const tree = createTree(data, 'id', 'parentId', null);

    Но вовсе не обязательно:

    function createTree(data, idKey, parentKey) {
      const tree = Object.fromEntries(data.map(n => [ n[idKey], { ...n, children: [] } ]));
    
      return Object
        .values(tree)
        .filter(n => !(tree[n[parentKey]] && tree[n[parentKey]].children.push(n)));
    }
    
    
    const tree = createTree(data, 'id', 'parentId');
    Ответ написан
    Комментировать
  • Как можно сформировать дерево категорий в javascript?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сперва превращаем плоский массив во вложенный:

    function createTreeData(arr, idKey, parentKey) {
      const tree = Object.fromEntries(arr.map(n => [ n[idKey], { ...n, children: [] } ]));
      return Object.values(tree).filter(n => !tree[n[parentKey]]?.children.push(n));
    }
    
    
    const treeData = createTreeData(data, 'id', 'parent_id');

    Затем можно собрать разметку дерева:

    const createTreeHTML = data =>
      Array.isArray(data) && data.length
        ? `<ul>${data.map(n => `
             <li>
               ${n.name}
               ${createTreeHTML(n.children)}
             </li>`).join('')}
           </ul>`
        : '';
    
    
    document.body.insertAdjacentHTML('beforeend', createTreeHTML(treeData));

    Или, создавать элементы напрямую:

    const createTreeElement = data =>
      data instanceof Array && data.length
        ? data.reduce((ul, n) => (
            ul.append(document.createElement('li')),
            ul.lastChild.append(n.name, createTreeElement(n.children)),
            ul
          ), document.createElement('ul'))
        : '';
    
    
    document.body.append(createTreeElement(treeData));

    ИЛИ

    Без создания промежуточного вложенного массива:

    function createTreeElement(arr, idKey, parentKey) {
      const tree = arr.reduce((acc, { [parentKey]: n }) => (
        acc[n] = acc[n] ?? document.createElement('ul'),
        acc
      ), {});
    
      arr.forEach(n => (
        tree[n[parentKey]].append(document.createElement('li')),
        tree[n[parentKey]].lastChild.append(n.name, tree[n[idKey]] ?? '')
      ));
    
      return Object.values(tree).reduce((ul, n) => (
        n.parentNode || ul.append(...n.children),
        ul
      ), document.createElement('ul'));
      // или, если не надо объединять в общий список элементы, у которых разные корневые parent_id
      // return Object.values(tree).filter(n => !n.parentNode);
    }
    
    
    document.body.append(createTreeElement(data, 'id', 'parent_id'));
    Ответ написан
    Комментировать
  • Есть ли в с++ аналог контейнера multimap, но который бы хранил пары в порядке добавления?

    maaGames
    @maaGames
    Погроммирую программы
    Это С++, если чего-то нет, то можно сделать. Можно сделать, всё что угодно, потому что это С++ и никаких ограничений почти нет.

    std::map< KeyType, std::list > advancedMultimap;

    Можно сделать класс, чтобы интерфейс доступа был более удобным.
    Ответ написан
    3 комментария