Люблю Erlang, кёрлинг, группу Слот, мультики Миядзаки и другие странные вещи.

Проектирую приложения, пишу и проверяю код.
Налаживаю и контролирую процессы.
Если не мешают.
Контакты
Местоположение
Россия, Москва и Московская обл., Москва

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (16)
  • C# под линукс. В чем отличие от винды?

    serafimprozorov
    @serafimprozorov
    Люблю Erlang....
    Смешались в кучу кони, люди...

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

    Во-первых, GUI можно делать не только c использованием WinForms/WPF, а с помощью любой библиотеки для которой есть байндинги. Более того, внезапно существуют вполне себе "родные" для .NET кроссплатформенные GUI-фреймворки: Gtk# и AvaloniaUI, и, если первый, честно говоря, специфичен, то со вторым зная WPF и XAML разобраться не составляет большого труда;

    Во-вторых, это, правда уже совсем Rocket Science, писать GUI можно вообще без фреймворка;

    Ну и в-третьих: говорить, что возможности C# ограничиваются возможностями ASP.NET Core в корне неверно, потому как ASP.NET Core -- это веб-фреймворк, написанный на C#, рантаймами для которого являются .NET Core и .NET Framework.

    Касательно же ограничений, они по большому счету сводятся к тому, что, если Вы пишете кроссплатформенное ПО, то вынуждены использовать только кроссплатформенные библиотеки и API, к которым, например, вышеупомянутый WPF не относится. Если же Вы планируете разрабатывать ПО только под Линукс, то ограничений по большому счету нет.
    Ответ написан
  • Почему несмотря на устаревание HTML, CSS и JavaScript не делается шагов в сторону альтернатив, отвечающим спросу рынка веб-разработки?

    serafimprozorov
    @serafimprozorov
    Люблю Erlang....
    Странный вопрос. Скорее всего потому что имеющиеся инструменты полностью покрывают потребности. Если Вам не нравится работать с HTML, посмотрите, например, на Flutter и его возможность компилироваться в браузерное приложение, там Вы полностью абстрагируетесь от «устаревших» технологий, ибо использует вся эта радость свою систему виджетов (это не то же самое, что компоненты, например, в React) и свою отрисовку в том числе на Canvas. Всё хорошо, но при возникновении каких-то траблов можно застрелиться...
    Ответ написан
  • Как правильно конвертировать массив?

    serafimprozorov
    @serafimprozorov
    Люблю Erlang....
    Эх, вспомнил я первый курс универа...
    Я бы, наверное, сделал как-то так, учитывая, что это всё же учебное задание, если есть вопросы, велкам, отвечу.

    class Program
    {
        private const int MinArrayLength = 2;
        private const int MaxArrayLength = 20;
    
    
        private static int ReadInteger(string prompt)
        {
            while (true)
            {
                Console.Write(prompt);
                
                string input = Console.ReadLine();
    
                if (!int.TryParse(input, out int number))
                {
                    Console.WriteLine($"Значение {input} не является числом");
                    continue;
                }
    
                return number;
            }
        }
    
        private static int ReadArrayLength()
        {
            while (true)
            {
                var number = ReadInteger($"Введите размер массива от {MinArrayLength} до {MaxArrayLength}: ");
    
                if (number > MaxArrayLength || number < MinArrayLength)
                {
                    Console.WriteLine($"Число {number} лежит вне границ интервала [{MinArrayLength}..{MaxArrayLength}]");
                    continue;
                }
    
                return number;
            }
        }
    
        private static int[] ReadArray(int length)
        {
            while (true)
            {
                Console.Write($"Введите до {length} целых чисел через пробел: ");
    
                string input = Console.ReadLine();
                string[] entries = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
    
                if (entries.Length > length)
                {
                    Console.WriteLine($"Вы ввели более {length} чисел");
                    continue;
                }
    
                if (!TryParseIntegerArray(length, entries, out var array))
                    continue;
    
                return array;
            }
        }
    
        private static bool TryParseIntegerArray(int length, string[] strings, out int[] array)
        {
            array = new int[length];
    
            for (int i = 0; i < strings.Length; ++i)
            {
                if (!int.TryParse(strings[i], out int number))
                {
                    Console.WriteLine($"Строка {strings[i]} (позиция {i}) не является числом");
                    return false;
                }
    
                array[i] = number;
            }
    
            if (length > strings.Length)
            {
                Array.Clear(array, strings.Length, length - strings.Length);
            }
    
            return true;
        }
    
        private static int CountNumberOccurs(int[] array, int targetNumber)
        {
            int occursCount = 0;
            
            for (int i = 0; i < array.Length; ++i)
            {
                if (array[i] == targetNumber)
                    occursCount++;
            }
    
            return occursCount;
        }
    
    
        static void Main(string[] args)
        {
            int arrayLength = ReadArrayLength();
            int[] array = ReadArray(arrayLength);
            int targetNumber = ReadInteger("Введите целое число для поиска повторений: ");
    
            int occursCount = CountNumberOccurs(array, targetNumber);
    
            Console.WriteLine($"Количество вхождений числа {targetNumber} в массив: {occursCount}.");
            Console.WriteLine("Нажмите <ENTER> для выхода.");
            Console.ReadLine();
        }
    }
    Ответ написан
  • Что не так с классами в ASP.Net Core?

    serafimprozorov
    @serafimprozorov
    Люблю Erlang....
    Если Вы хотите, чтобы экземпляры Ваших классов создавались при старте приложения и оставались доступными всё время его работы, Вам надо либо сделать их статическими полями какого-либо класса, либо использовать паттерн Синглтон (ни разу не антипаттерн при правильном использовании), либо, как Вам говорили выше,использовать Dependency Injection, почитать про него можно, например, здесь: https://docs.microsoft.com/ru-ru/aspnet/core/funda...

    Почему, вообще, происходит то, что Вы описали. Класс Startup создается при старте приложения и используется только для его конфигурации, то есть, он не живёт всё время работы Вашего приложения, а следовательно, все объекты, являющиеся его полями, уничтожаются сборщиком мусора, если не передать владение ими другому объекту, имеющему большее время жизни. Вы же, как я понял, просто создаете эти объекты в методе, в этом случае, опять же, если не передать владение, они станут недоступными сразу после завершения метода и весьма быстро соберутся сборщиком мусора.
    Ответ написан
  • Могут ли принять человека на работу .Net программиста без высшего образования?

    serafimprozorov
    @serafimprozorov
    Люблю Erlang....
    Работаю программером в том числе и .NET уже, страшно подумать, почти 16 лет, сейчас -- в геймдеве серверным разработчиком.
    Высшего образования нет, точнее, вообще никакого специального нет.
    Ответ написан