Ответы пользователя по тегу C#
  • Как сравнить два List?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Используйте Where:
    var list3 = list1.Where(i => !list2.Contains(i.vopros)).ToList();

    Или Except, если второй список вообще не содержит искомых объектов:
    var list3 = list1.Except(list2).ToList();
    В классе переопределите Equals и GetHashCode, чтобы не обязательно реализовывать компарер.
    Ответ написан
    1 комментарий
  • Как хранить данную структуру данных?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Игроки в списке. У каждого игрока список наложенных эффектов - List<Effect>. Эффект не должен обрабатывать изменения на игрока, он только хранит информацию об эффекте (это будут очень простые классы с парой-тройкой свойств).

    Игрок не должен сам обрабатывать эффекты, для обработки сделать отдельный класс, что-то типа EffectDealer. И в классе обработки хода для каждого игрока запускать этот класс - что-то типа new EffectDealer(gamer).Deal();

    И для каждого эффекта у вас будет отдельный класс, который будет изменять свойства игрока в зависимости от эффекта.

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

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Можно попробовать разделить кнопки. Grid очень легко позволяет отобразить один элемент поверх другого. Или у вас по бизнес-логике ToggleButton обязательно должен быть внутри Button?
    Ответ написан
    Комментировать
  • Как реализовать обработчик консольных комманд в приложении?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Разделяйте строку по пробелу - так вы получите имя команды и параметры, в первом элементе массива - имя команды, в остальных - параметры. Каждый параметр нужно разделить по символу "="- и вы получите имя параметра и значение.
    Дальше, хорошо создать интерфейс (и/или абстрактный класс) хендлера команды и реализовать интерфейс для каждой команды. Так у вас получится несколько классов, по одному для каждой команды. Останется выбрать нужный хендлер, и запустить его, указав ему параметры. Если команд много, то можно подумать о дальнейшем разделении классов хендлеров на подгруппы.

    Если нужно, могу показать примерный код для моего способа. А по хорошему, используйте готовый код (правда, смотрите, умеет ли тот чужой код парсить из строки, а не из входных аргументов программы).
    Ответ написан
    Комментировать
  • Кто может дать пример парсинга json в C#?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Json.NET
    Пакет NuGet

    В пустой WPF проект добавьте listBox1, установите через NuGet пакет, и замените MainWindow.xaml.cs на этот код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    using Newtonsoft.Json;
    
    namespace WpfApplication9
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                Data data = JsonConvert.DeserializeObject<Data>(json);
                foreach (Item item in data.Response.Items)
                {
                    listBox1.Items.Add(new ListBoxItem() { Content = item });
                }
            }
        
            class Data
            {
                public Response Response;
            }
    
            class Response
            {
                public int Count;
                public Item[] Items;
            }
    
            class Item
            {
                public int Id;
                public int Owner_id;
                public string Artist;
                public string Title;
                public int Duration;
                public string Url;
                public int Genre_id;
    
                public override string ToString()
                {
                    return string.Format("{0} ({1})", Title, Url);
                }
            }
    
            string json = @"{
      ""response"":{
      ""count"":198,
      ""items"":[
      {
        ""id"":340125039,
        ""owner_id"":34254853,
        ""artist"":""IOWA"",
        ""title"":""Маршрутка"",
        ""duration"":190,
        ""url"":""http:\/\/cs7-5v4.vk-cdn.net\/p12\/630de313d73392.mp3?extra=fNremCtKgl4pnCbyZ0q-LOBIfvRoUf5QGo8oWwYrOCza6AlSUOdYIImUideFd3hpPa325ckSD_c3zQ5FNluMS80lrSJiM6FC"",
        ""genre_id"":9
      },
      {
        ""id"":340120602,
        ""owner_id"":34254853,
        ""artist"":""Stromae"",
        ""title"":""Tous Les Memes"",
        ""duration"":168,
        ""url"":""http:\/\/cs7-1v4.vk-cdn.net\/p18\/600b1a66ef64d6.mp3?extra=GNP79R4nHR39dY50YJ_ddDxEuX6SQcxtG3nCgzI0LdvxoaLh5lQ2qZqqpABCqPoXOISyNzWOqMZx4_nTL3bQ31i57z-UXl4V"",
        ""lyrics_id"":99395752
    
      }
      ]
      }
    }";
    }
    }
    Ответ написан
    Комментировать
  • Есть ли легкие книги по C#?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Мне понравилась книга Б.Ватсон С# 4.0 на примерах. Хорошие рецепты для решения частых задач. Но теории в ней нет, по теории параллельно могу порекомендовать Фленова.
    Ответ написан
    Комментировать
  • Где найти автопачер для собственной игры?

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

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Вам для чего использовать? В смысле, как часто будет запускаться? Если редко, например, по щелчку мышкой, то вообще не важно, сколько времени займёт эта операция, и важнее будет понятность команды, с точки зрения дальнейшей поддержки. Поэтому лучше всего подойдёт Path.GetExtension().
    А если у вас эта команда вызывается много раз в цикле, и её производительность на самом деле важна, только тогда стоит задумываться о том, каким способом получать данные.
    Общее правило - пишите как можно более понятный и очевидный код, а где нужна производительность - только там нужно оптимизировать. Преждевременная оптимизация - зло, ибо отнимает кучу времени программиста.
    Ответ написан