Ответы пользователя по тегу C#
  • Как выбрать процент элементов из List C# с помощью Linq?

    @Voland69
    using System;
    using System.Linq;
    using System.Collections.Generic;
    					
    public class Program
    {
    	public static void Main()
    	{
    		var list = new List<int> {1,2,3,4,5,6,7,8,9};
    		list.Top(30).ToList().ForEach(x => Console.WriteLine(x));
    	}
    }
    
    public static class IEnumerableExt
    {
    	public static IEnumerable<T> Top<T>(this IEnumerable<T> list, double percent)
    	{
    		var elementCount = (int)Math.Ceiling((double)list.Count() * percent / 100);
    		return list.OrderByDescending(x => x).Take(elementCount);
    	}
    }


    пример на фиддле
    Ответ написан
  • Как в if проверить что fillAmount = 1.0f?

    @Voland69
    Сравнивать числа с плавающей точкой через оператор == неверно, поскольку многие рациональные числа в формате float (и double тоже) не представимы точно. Поэтому можно наблюдать ситуацию, когда, к примеру, ожидаемое 3 == 3 вернет false, поскольку в одном операнде на самом деле 2.999998 а во втором 3.000004.
    Если Вы знаете ожидаемый порядок чисел, неплохим выходом будет сравнение разницы чисел с некоторой величиной точности.
    Что-то вроде:
    bool IsFpNumsEqual(float a, float b, float eps = 1.0E-5f) => Math.Abs(a - b) < eps;

    За подробностями прошу в статью на Хабре
    Ответ написан
    Комментировать
  • Можно ли установить компилятор C# без Visual Studio?

    @Voland69
    Можно, как минимум для .NET есть SDK SDK
    .NET Framework тоже несут с собой MsBuild.
    Ответ написан
    Комментировать
  • Как можно решить ошибку CS1061,в коде проекта Юнити в Visual Studio?

    @Voland69
    В аду есть специальный котел для авторов вопросов с кодом в скринах.
    тут и тут смотрели?
    FindGameObjectsWithTag возвращает массив GameObject'ов, так что надо или итерировать, или брать первый элемент.
    joystick = GameObject.FindGameObjectsWithTag("Joystick").FirstOrDefault()?.GetComponent<Joystick>();
    Ответ написан
    1 комментарий
  • Нужно ли как-то исправлять такие перегрузки?

    @Voland69
    Возьмем за основу метод2
    изменим сигнатуру
    public static void Move(this Transform transform, Vector3 target, float time, AnimationCurve curve = null)

    и изменим использование curve следующим образом
    transform.position = Vector3.Lerp(start, target, curve != null ? curve.Evaluate(deltaTime) : deltaTime);


    Или создать две перегрузки, как предлагает insighter

    Плюсы - меньше кода, меньше можно накосячить.
    Минусы - в случае с дефолтным параметром ситуация когда curve == null из-за ошибки и когда так задумано ничем не отличается. При перегрузке тоже правда будет использоваться некий дефолтный параметр.
    Ответ написан
    Комментировать
  • Как преобразовать unix в datetime C#?

    @Voland69
    Parse у вас в блоке один, и ошибка судя-по всему именно в нем.
    Если пример верен, то вижу две ошибки:
    1. long не сможет распарсить вещественное число
    2. если взять double при дефолтной российской локали тоже не сможет - т.к. десятичный разделитель не тот

    P.S. метод расчета сомнителен - что за 2550 в днях? Если 70 лет то это 25550 дней без учета високосных годов (70*365).

    P.P.S. DateTime умеет хранить от 1 января 0001 года, его AddDays принимает Double, думаю что Ваш алгоритм можно упростить и вообще избавиться от unix time секунд.
    Ответ написан
  • Из-за чего вылетает "Invalid length for a Base-64 char array or string"?

    @Voland69
    Видимо вводимая строка не является валидными данными в base64.
    Используйте web сервис для кодирования base64 и тестируйте на валидных строках, например "ZXhhbXBsZQ==" ("example").
    Ответ написан
    1 комментарий
  • Передача значения в другой класс?

    @Voland69
    Сообщением, событием, вызовом метода второй формы из первой или даже в конструкторе второй формы.
    Ответ написан
    Комментировать
  • На каком я сейчас уровне?

    @Voland69
    Открыл первый попавшийся файл в репе:
    1. Какова цель GetCompanyById, если к этой же коллекции есть доступ на чтение снаружи?
    2. Что произойдет, если в этот метод я подам -1, 0, 100500?

    К остальным замечаниям присоединяюсь (нет файла проекта, нет ридми и т.п.).
    То есть сейчас это даже не программа - а набор исходников, под какой фреймворк/сдк, под какую среду?
    Я же могу это закинуть в проект под .NET Framework 4.0 и сказать что у вас тут десяток ошибок.
    Ответ написан
  • Что за ошибка во время отправки файла сообщением?

    @Voland69
    Путь указан относительный, вопрос относительно чего?
    В разном окружении текущая категория отличается, вплоть до того что при запуске вашей проги в линуксе при помощи следующих команд
    $ user@comp myProg: ./bin/run
    $ user@comp bin: ./run
    результат (найден файл али нет) будет отличаться.

    Решение - узнать где ваш бинарь и строить пути относительно этого места.
    Ответ написан
    Комментировать
  • Как шифруться пароль?

    @Voland69
    Этот хеш также содержит так называемую соль, а вернее хэш соли, а скорее хэш пароля + соль.
    В ряде библиотек если "руками" не задавать соль, она генерится динамически, каждый раз разная.
    Для проверки введенного пароля в таком случае предусмотрена функция
    bool Verify(string Hash, string Password)
    Ответ написан
  • Как получить данные поля класса, если поле List?

    @Voland69
    Подозреваю что нужно использовать Include.
    Примерно так:
    IList<Realty> realties = db.Realties.Where(r => r.Status == status).Include(r => r.ImgUrl).ToList();
    Ответ написан
  • На чем лучше делать маленькое API?

    @Voland69
    Если умеете в шарп, то ASP.NET webapi вполне ок.
    Если есть желание поиграться, то можно на go посмотреть, например. Язык компилируемый, собирается в статический бинарь.
    Решения на Node.js или Python (django) имхо не стоит рассматривать - и там и там будет виртуалка/интерпретатор, то есть принципиальной разницы с шарпом не будет, так что можно брать знакомый стек.
    Ответ написан
  • Как использовать CheckBox в WinForms?

    @Voland69
    Обработайте клик на чек бокс
    private void checkBox1_Click(object sender, System.EventArgs e)  
    {  
       // The CheckBox control's Text property is changed each time the
       // control is clicked, indicating a checked or unchecked state.  
       if (checkBox1.Checked)  
       {  
          checkBox1.Text = "Checked";  
       }  
       else  
       {  
          checkBox1.Text = "Unchecked";  
       }  
    }

    и переключайте режим растягивания окна.
    Ответ написан
  • C# как ускорить контекст меню?

    @Voland69
    Убрать блокирующее ожидание завершения метода, исполняющегося секунды 2 при наведении на новости.
    Ответ написан
    Комментировать
  • Что значит данная запись на C#?

    @Voland69
    Такая Headers?.UserAgent запись - это Null Propagation - если Headers == null выражение вернет null (без ? было бы NRE)
    value ?? string.Empty это сравнение значения с null - если value != null, то вернет value, в противном случае вернет string.Empty
    Ответ написан
    Комментировать
  • Что делаю не верно?

    @Voland69
    1. async/await говорят о том, что метод может быть выполнен асинхронно, но не гарантируют этого
    2. new Tread() создает поток, который что-то делает. поток по умолчанию выполняется параллельно с GUI Event Loop, и чтобы вернуть данные коду внутри потока можно передать коллбэк, который будет выполнен после длительной операции
    3. Invoke() ЕМНИП служит для синхронизации бэкграунд потока с GUI (просто так из фона нельзя обновлять данные на форме), в него нужно помещать не весь код, а только тот код, который полученные в фоне данные отправляет форме
    4. если метод не умеет выдавать данные не разом, а по мере загрузки, интерактивное появление новых данных на форме не получится
    5. если Вы полностью контролируете загрузку данных, можно сделать на событиях синхронизацию с GUI - загрузчик кидает событие onDataRecieved а форма на него подписана и обновляет свои данные
    Ответ написан
    Комментировать
  • Как реализовать запрос к api четко по времени?

    @Voland69
    Попробуйте использовать IHostedService, он как раз предназначен для выполнения задач по таймеру.
    Ответ написан
  • Что будет если после разделителя идет следующий разделитель в c# в методе split?

    @Voland69
    Ваш пример в .NET 5 работает корректно: возвращает 2 и две пустых строки (см. свойство Length), то есть никаких пробелов нет.
    Ответ написан
    Комментировать
  • Идеальное логирование в .NET приложении. Как достичь? Что использовать?

    @Voland69
    Механизм таков:
    1. Везде где есть логи пишем в стандартный логгер из Microsoft.Extensions.Logging, там ILogger, где T - тип класса, из которого пишем логи.
    2. Поднимаем ELK стэк рядом или на соседней машине
    3. В конфигурации приложения подключаем реализацию логгера, умеющую отправлять логи в Logstash (например Serilog)
    4. Не забываем в конфигурации приложения сделать fallback - если в Logstash не получилось, кидаем в файл (потом если что можно руками скормить)
    5. Если нужно, фильтруем логи на уровне Logstash (как минимум нужно предусмотреть, чтобы логи шли в нужный индекс в ElastickSearch)
    6. Настраиваем дашборды в Kibana и мониторим работу приложения.

    P.S. может это конечно из пушки по воробьям, но как вариант можно использовать часть ELK стэка если все не нужно - тот же логстеш может не в эластик писать, а в файл насколько я помню - т.е. можно сделать наборы файлов по фильтрам.
    Ответ написан
    3 комментария