Задать вопрос
Ответы пользователя по тегу C#
  • Почему ParameterizedThreadStart не обощенный?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    - На C, чтобы запустить поток, аргумент потоку передается как void*. Это то же самое, что и object. Зачем пилить больше?
    - Ну сделаешь ты дженерик и что дальше? Другому потоку аргумент передается все равно по ссылке, а не через стек/регистры (как функции). Учи как работают потоки
    Ответ написан
    Комментировать
  • Почему не парсится JSON в Docker-контейнере?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    1) Может у вас прокси стоит, который заголовки удаляет?

    Логи говорят, что невозможно выполнить согласование контента (content negotiation).

    2) Попробуйте вручную зарегистировать Json форматтер для запросов первым с списке.

    В списке первым стоит `Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter`. Не работал с ним, но название говорит, что это какой-то Fallback класс, который просто скипает запрос
    Ответ написан
    Комментировать
  • Как подключить сторонню библиотеку с dll-ками к проекту .net core?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    В Rider это можно сделать через тот же самый Add Reference.
    Правая кнопка по проекту -> Add -> Reference... -> Внизу нажимаешь "Add from..." -> Находишь свой dll
    Ответ написан
    Комментировать
  • Как запретить ввод русских букв в textBox C#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    На SO уже есть решение через regex

    https://stackoverflow.com/questions/11414452/is-th...

    if (Regex.IsMatch(stringToCheck, @"\p{IsCyrillic}"))
    {
        // there is at least one cyrillic character in the string
    }
    Ответ написан
    1 комментарий
  • Как найти соответствие по generic типу?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Одно из решений
    public interface IParam
    {
    }
    
    public interface IProcessor
    { }
    
    public interface IProcessor<in T>: IProcessor 
        where T : IParam
    {
        public void Apply(T param);
    }
    
    public class ConcreteProcessorA : IProcessor<ConcreteParamA>
    {
        public void Apply(ConcreteParamA param)
        {
            Console.WriteLine("Hello from processor A");
        }
    }
    
    public class ConcreteParamA : IParam
    {
        
    }
    
    public class ConcreteProcessorB : IProcessor<ConcreteParamB>
    {
        public void Apply(ConcreteParamB param)
        {
            Console.WriteLine("hello form ProcessorB");
        }
    }
    
    public class ConcreteParamB : IParam
    {
        
    }
    
    public class Provider
    {
        public Provider(IEnumerable<IProcessor> processors)
        {
            _processors = processors.ToList();
        }
        private List<IProcessor> _processors;
         
        public void Apply<TParam>(TParam param) where TParam: IParam
        {
            foreach (var processor in _processors.Where(p => p
                                                            .GetType()
                                                            .GetInterfaces()
                                                            .Any(i => i.IsAssignableTo(typeof(IProcessor<TParam>))))
                                                 .Cast<IProcessor<TParam>>())
            {
                processor.Apply(param);
            }
            throw new InvalidOperationException("Для переданного типа нет обработчика");
        }
    }
    
    public class Program
    {
        static void Main(string[] args)
        {
            var provider = new Provider(new IProcessor[]
                                        {
                                            new ConcreteProcessorA()
                                        });
            
            provider.Apply(new ConcreteParamA());
            try
            {
                provider.Apply(new ConcreteParamB());
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            
        }
    }

    Сначала выдает
    Hello from processor A
    затем пишет исключение, т.к. обработчика не нашлось
    Ответ написан
    Комментировать
  • Как удалить событие, добавленное в виде лямбда-выражения?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    В общем случае нельзя, так как объект лямбды создается каждый, поэтому нужно вынести функцию отдельно.
    Но если регистрация и удаление обработчика происходят в одной функции/блоке, то ответ joyrax-dev будет правильным.
    Но можно сделать такой костыль:
    public class MyEvent
    {
        public event EventHandler ActionHappened;
    
        public void FireEvent()
        {
            ActionHappened?.Invoke(this, EventArgs.Empty);
        }
    }
    
    public class SomeClass
    {
        public void RegisterInner(MyEvent @event)
        {
            EventHandler handler = null!;
            handler = (sender, args) =>
            {
                Console.WriteLine("Hello, world");
                @event.ActionHappened -= handler;
            };
    
            @event.ActionHappened += handler;
        }
    }
    public class Program
    {
        public static void Main()
        {
              var myEvent = new MyEvent();
              var someClass = new SomeClass();
              someClass.RegisterInner(myEvent);
              myEvent.FireEvent();
              myEvent.FireEvent();
              myEvent.FireEvent();
              myEvent.FireEvent();
              myEvent.FireEvent();
         }
    }

    Hello, world будет выведен только 1 раз
    Ответ написан
    1 комментарий
  • Как вывести список файлов из директории сервера, которые были созданы или изменены позднее определенной даты?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Вместо "." укажите свою директорию.
    var lastAccess = new DateTime(2022, 10, 10);
    foreach (var fileInfo in Directory.GetFiles(".", "*", SearchOption.AllDirectories)
                                  .Select(f => new FileInfo(f))
                                  .Where(f => f.LastAccessTime > lastAccess))
    {
        Console.WriteLine(fileInfo);
    }
    Ответ написан