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

    @kttotto
    пофиг на чем писать
    1. Поставьте брекпоинт в контроллере и посмотрите this.Request.Query, там будут все параметры, что пришли в контроллер, так же они могут быть в Body. Именно для этого и нужны атрибуты FromBody и FromRequest, чтобы точнее указать от куда мапить значения на модель. После того как он спарсит и смапить значения в модель, если есть проверка, он возьмет атрибуты и по ним уже проверит на валидность.

    2. Вы правильно понимаете. Все это реализовано в identity.
    Ответ написан
    Комментировать
  • Десериализация json полей в массив?

    @kttotto
    пофиг на чем писать
    var model = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
    var photos = model.Where(x => x.Key.Contains("photo"));
    Ответ написан
    3 комментария
  • Как начать проект на asp.net?

    @kttotto
    пофиг на чем писать
    Metanit
    Все кратко и по делу, как конспект.
    Ответ написан
    Комментировать
  • Как добавить модель в asp.net mvc?

    @kttotto
    пофиг на чем писать
    Для выпадающий списков в MVC есть хелперы Html.DropDownList и Html.ListBox. Первый для одиночного выбора, второй для множественного. В модели, которую передаете на вьюшку, передаете поле с коллекцией SelectList и поле для выбранного значения (Selection). Вы, я так понимаю, коллекцию передали через вьюбэг, вот поля под выбор нет.
    А дальше сам список создаете через хелпер
    @Html.DropDownList(x => x.Selection, Model.Items)
    При отправке формы выбранное значение уйдет в Selection.
    Если же Вы используете Core, то там tag-хелперы.

    Здесь в ответе есть пример.
    Ответ написан
    Комментировать
  • Как точно посчитать количество изменений например true на false и наоборот false на true?

    @kttotto
    пофиг на чем писать
    privare bool _property;
    private int count;
    public bool Property
    {
    	get { return _property; }
    	set 
    	{ 
    		if(_property != value)
    			count++;
    		_property = value;
    	}
    }
    Ответ написан
    2 комментария
  • Как правильно дождаться выполнения всех потоков, созданных в цикле?

    @kttotto
    пофиг на чем писать
    У Вас не правильный подход. Во первых забудьте про Thread и используйте TPL. Во вторых для распараллеливания запросов в цикле есть замечательный метод Parallel.ForEach. В третьих для ожидания выполнения всех параллельных задач есть Task.WaitAll.
    В общем Вы можете создать список Task-ов и запихнуть их в Task.WaitAll, но лучше пройдитесь параллельным форичем по Вашему периоду и внутри запускайте Ваши методы. Код за форичем будет ожидать завершения всех потоков в цикле.
    Ответ написан
    2 комментария
  • Mysql - Как заморозить доступ к строке чтобы другие потоки не работали с ней?

    @kttotto
    пофиг на чем писать
    Можно попробовать эти проверочные поля вынести в код, сделать этот объект доступным для всех потоков. Поток, прежде, чем сделать запрос, сначала в список заносит id строки, ответ получил - из списка этот id удалил. Другие потоки, прежде чем сделать запрос, проверяют список, если id есть в списке, то в ожидание.
    Тут может быть та же проблема, но с меньшей вероятностью, поэтому проверка должна быть двойная: сначала проверил, что id нет такого, добавил, потом проверил, что их не два в списке и только тогда запрос. Если два, то удалил и с таймаутом пытается опять добавить.
    Я не знаю Ваших объемов бд, но как второй вариант рассмотреть нормальные очереди запросов. Перед запросом проверить есть ли очередь с именем айдишника, если нет, то создать и последующие запросы просто будут добавляться в свою очередь.
    Ответ написан
    Комментировать
  • В каких случаях используют С# и Java в веб-разработке?

    @kttotto
    пофиг на чем писать
    Без разницы на чем писать. На любом из перечисленных можно написать хорошее качественное решение. Стек для веба выбирают в основном из того с чем умеешь работать.
    Ответ написан
    Комментировать
  • Как и на чем лучше сделать приложение с таким интерфейсом (пример на windows form)?

    @kttotto
    пофиг на чем писать
    Не понятен вопрос, ибо "проще" понятие растяжимое и субъективное. Если Вы не слышали о WPF, то советую на него обратить внимание. Он не проще винформов, но он умеет решать те задачи, которые Вы описали. Если не найдете внутри нужных контролов, то на просторах инета найдете кучу дополнительных.
    Ответ написан
    Комментировать
  • Насколько актуально сегодня в финансовом плане заниматься геймдевом?

    @kttotto
    пофиг на чем писать
    Одно время интересовался геймдейвом, всевозможные конференции, общался со многими людьми, которые на этом зарабатывают и с теми, которые ушли из того направления. Те, которые зарабатывают, так и говорят, что это фарт. Ты можешь вложиться в игрушку, думая, что она будет революцией, а в итоге окажется никому не нужна. А может быть наоборот - какой то бред дешевый, а будет миллион загрузок по доллару. В общем геймдейв трудно предсказуемая вещь в плане заработка и поэтому один вариант, это конвейер, в ожидании, что какая-то выстрелит.

    Ну это я о мобильной разработке. Если говорить о серьезных играх, то в одиночку и даже 5 человек - это мало рук, т.к. для успеха важны даже не программисты и в реальных проектах они составляют 10% от всей команды, остальные: сценаристы, иллюстраторы, дизайнеры, звукооператоры, менеджеры и т.д.

    И это все при том, что в последние годы, геймдейв по обороту превзошел Голивуд, т.е. денег там крутится немерено и можно попробовать что-то себе урвать. Но опять, из моего общения я вынес, что влезть туда сейчас очень тяжело, рынок устаканился, ниши поделены и новички, без поддержки монстров, обречены на провал. Молодые сейчас в основном сами не продают потребителю, продают тем, у кого есть устоявшиеся выходы на рынки.
    Ответ написан
    Комментировать
  • Какой смысл в boxing/unboxing?

    @kttotto
    пофиг на чем писать
    Иногда есть необходимость работать с чем то обобщенным, абстрагироваться от конкретного типа. Например при сериализации в json для отправки данных клиенту, как то так
    public string ResponseData(object value)
    {
    	retrun JsonConvert.Serialaze(value);
    }

    Теперь мы может одним методом отправить хоть объект, хоть значимый тип. Если бы не было упаковки, пришлось бы писать кучу перегрузок для метода.
    Ответ написан
    1 комментарий
  • Как реализовать фильтрацию записей на основе SQL подобного текста?

    @kttotto
    пофиг на чем писать
    Надо писать свою грамматику и анализатор под него, который будет генерировать нормальный sql запрос. Мы применяли antlr4cs
    Ответ написан
    Комментировать
  • Как я могу превратить код в изображение?

    @kttotto
    пофиг на чем писать
    На base64 это не похоже, значит обычный набор байтов. Значит строку надо конвертнуть в массив байтов. Ну потом это в поток и либо сохранить в файл, либо отдать дальше куда надо. Примерно как то так
    byte[] imageBytes = Encoding.ASCII.GetString(strData);
    using(var str = Image.FromStream(new MemoryStream(imageBytes)))
    {
        str.Save("image.png", ImageFormat.Png);
    }
    Ответ написан
    8 комментариев
  • Какие решения для создания UI вы используете?

    @kttotto
    пофиг на чем писать
    Windows Forms устаревшая технология. Сейчас для десктопа под виндовс разрабатываются на WPF. Там спецом все сделано для возможности гибкого дизайна.
    Ответ написан
    3 комментария
  • Как узнать размер изображения?

    @kttotto
    пофиг на чем писать
    Если просто для информации
    Image myImg = Image.FromFile("path here");
    Затем здесь.
    А в общем здесь.
    Bitmap нужен, если Вы с изображением что-то хотите сделать.
    Ответ написан
    1 комментарий
  • Как реализовать роутинг для WebSocketServer?

    @kttotto
    пофиг на чем писать
    Не совсем понятно зачем Вам нужна цепочка обязонностей, если для каждого типа сообщения выполняется строго один хендлер.
    Как только Вы находите первый подходящий, Вы выходите из цикла
    if (handler.CanHandle(socket, messageType, server))
    {
    	handler.Handle(socket, webSocketMessage, server);
    	return;
    }

    Цепочка обязанностей, это по сути конвеер, по которому пройдет сообщение. Этот патерн хорош, что легко можно добавить новое условие обработчика для каких то поступающих данных. Например, первый хендлер расшифровать, второй отформатировать, третий залогировать и т.д. Для этого в каждом Вашем хендлере должен быть список разрешенных для обработки типов сообщений (чтобы каждый хендлер в конвеере знал какие ему нужно типы сообщений обработать) или в самом сообщении должно быть указано какими хендлерами его обрабатывать. Первый вариант получше.
    Но у вас в каждом хендлере указано строго для одного типа. Поэтому можно было обойтись обычным свитчом.
    public BaseHandler HandlerFactory(messageType)
    	switch(messageType)
    	{
    		case ChatMessage.Type:
    			retun new ChatHandler();
    			break;
    		case AuthMessage.Type:
    			retun new AuthHandler();
    			break;
    		...
    	}
    }
    
    var handler = Successor.HandlerFactory(messageType);
    handler.Handle(socket, webSocketMessage, server);

    Ну или на крайняк без этого фора
    var handler = Handlers.FirstOdefault(x => x.CanHandle(socket, messageType, server));
    if(handle != null)
    	handler.Handle(socket, webSocketMessage, server);

    Или сделайте из списка хендлеров дикшинари
    Handlers[messageType].Handle(socket, webSocketMessage, server);

    Лично я бы использовал фабрику, только в данном случае без лишних созданий экземпляров, это выглядит проще и понятнее, добавить в нее еще один хендлер - это две строки кода.
    Если Вас смущает статический класс, сделайте синглтон. По факту фабрики обычно и делают синглтонами.
    Если везде смущает три параметра в конструкторе (socket, messageType, server), оберните их в фасад
    class HandlerParam
    {
    	public IWebSocketConnection socket { get; set; }
    	public string webSocketMessage { get; set; }
    	public IServer server { get; set; }
    }
    
    var handlerParam = new HandlerParam
    {
    	...
    }
    
    handler.Handle(handlerParam);
    Ответ написан
    Комментировать
  • NUnit. Тест не выполняется и зависает - C#!?

    @kttotto
    пофиг на чем писать
    У Вас идет ожидание ввода Console.ReadLine(), это блокирует дальнейшее выполнение.
    Ответ написан
    1 комментарий
  • Как организовать многопоточный запуск метода с ограниченным кол-вом потоков?

    @kttotto
    пофиг на чем писать
    Parallel.ForEach(urls, new ParallelOptions { MaxDegreeOfParallelism = 50 }, url =>
    	{
    		CheckUrl(url);
    	}
    );
    Ответ написан
    Комментировать
  • ThreadPool vs Thread - многопоточный TCP сервер?

    @kttotto
    пофиг на чем писать
    Используя в чистом виде thread Вам придется руками контролить множество нюансов, когда в TPL это все сделается за Вас. Рекомендуется использовать TPL.
    Ответ написан
    Комментировать
  • Как правильно отправлять почту с вложением?

    @kttotto
    пофиг на чем писать
    Проблема может быть в почтовике, он может письмо с html вложениями интерпретировать как спам, опасное и т.д. В настройках своей почты попробуйте поснимать галочки всяких проверок и фильтров. Можете поискать письмо в папке со спамом.
    Ответ написан
    1 комментарий