Ответы пользователя по тегу C#
  • В чем ошибка при десериализации xml?

    @cicatrix
    было бы большой ошибкой думать
    Индекс вне границ массива, потому что внутри списка пусто. А пусто, потому что класс неправильно организован.

    Вот так должно быть:
    [XmlRoot]
    public class A
    {
        [System.Xml.Serialization.XmlElementAttribute("url")]
        public Reply[] replies { get; set; }
    
        [XmlTypeAttribute(AnonymousType = true)]
        public class Reply
        {
            [XmlAttribute("replyId")]
            public string replyId { get; set; }
            [XmlText()]
            public string Url { get; set; }
        } // Url
    } // class A


    Вообще, класс под XML лучше не писать, а просто скопировать текст из XML/Json и в Visual Studio в меню выбрать: Edit/Paste Special/Paste as XML classes.
    606ff76b7dd6e768671799.png
    Ответ написан
    1 комментарий
  • Как преобразовать большое int в byte?

    @cicatrix
    было бы большой ошибкой думать
    int value = 1196;
    var bytes = BitConverter.GetBytes(value);
    Ответ написан
    Комментировать
  • Как выкинуть кастомное исключение?

    @cicatrix
    было бы большой ошибкой думать
    Проброс исключения - самое "дорогое" из всех возможных решений проблемы в плане производительности. К тому же, это и не исключение вовсе, а вполне штатная ситуация. Простая проверка в виде вызова bool CustomerExists будет выглядеть здесь гораздо уместнее. К тому же, эта проверка у вас уже производится.
    А так, да, класс любого исключения должен быть наследником System.Exception
    Ответ написан
    Комментировать
  • Можно ли создать в C# иерархический класс?

    @cicatrix
    было бы большой ошибкой думать
    А может с конца начать. Можете обрисовать ситуацию, когда это может понадобиться? Ну или хотя бы псевдокодом описать?
    Просто есть такое чувство, что либо я чего-то недопонимаю, либо подобный приём наружает с пяток различных паттернов, которых рекомендуется придерживаться.
    И уж совсем не вижу проблемы в том, что вложенный класс надо инициализировать.
    Ответ написан
  • Как исправить ошибку в коде на c#?

    @cicatrix
    было бы большой ошибкой думать
    Зайди в метод InitializeComponent(), который вызывается из конструктора формы, и там увидишь привязку несуществующего обработчика событий.
    Ответ написан
  • Как реализовать систему отслеживания статуса пользователя программы реализованную на C#?

    @cicatrix
    было бы большой ошибкой думать
    А по какому протоколу работает связь клиент-сервер?
    Если TCP, то ведь можно просто опрашивать состояние соединения и держать его всё время ESTABLISHED. Правда, такой подход годится для относительно малого числа клиентов. Если их счёт пошёл на тысячи, то да, нужно опрашивать периодически.
    Ответ написан
  • Как запрашивать клавишу во время виполнения цикла (Console.ReadKey)?

    @cicatrix
    было бы большой ошибкой думать
    Ожидай нажатие в другом потоке
    class Program
    {
        static volatile bool exit = false;
        static void Main(string[] args)
        {
            Console.WriteLine("ESC - выход");
            Task.Factory.StartNew(() =>
            {
                while (Console.ReadKey().Key != ConsoleKey.Escape) ;
                exit = true;
            }); // ожидание нажатия в другом потоке
    
            while (!exit) // долгий цикл
            {
                // выполнение долгой операции
            } // while
        } // Main
    } // class Program
    Ответ написан
  • Какие материалы изучить для написания читов для игр?

    @cicatrix
    было бы большой ошибкой думать
    Любой "чит" представляет собой программу, которая находит в адресном пространстве памяти, выделенной под игровой процесс, необходимые данные и видоизменяет их.
    Собственно, сам по себе чит соорудить дело нехитрое. Найти работающий процесс, прошерстить его память, найти нужные данные и записать на их место другие (кол-во жизней, патронов и пр).
    Просто - да, но дьявол в деталях. Поиск необходимой вам информации - процесс долгий и муторный. Распространённые "универсальные" читы вроде CheatEngine работают путём сравнения состояний до и после изменения, тем самым, сужая круг поиска. Но это неоптимально. Нормальный чит - продукт реверс-инжиниринга игровой программы, где ты уже точно знаешь, как игра распределяет в памяти свои ресурсы и как их искать.
    Наличие исходного кода игры сильно помогает, но только отчасти.
    Разумеется, разработчики игр знают обо всех этих приёмчиках и стараются максимально затруднить подобные действия. Одним из самых эффективных методов защиты является сохранение состояния игры за пределами машины игрока (на сервере разработчика). Нормальный разработчик просто не учитывает или игнорирует некорректное состояние клиентской машины. Внедрить чит игру с такой архитектурой нереально. Но часто разработчики идут на компромиссы, чтобы не хранить вообще всё на сервере, часть данных размещается на машине клиента. С этим уже можно работать, но алгоритмы на сервере направлены на поиск несоответствий в состоянии клиента и последующие санкции, если игрок будет уличён в использовании читов.
    Ну и есть конченные разработчики, позволяющие изменять состояние клиента как угодно. Но обычно такие игры просто теряют своих клиентов потому что из-за обилия читеров становится невозможно играть.
    Ответ написан
  • Какие книги можете посоветовать для Backend-разработчика?

    @cicatrix
    было бы большой ошибкой думать
    Для понимания того, что такое REST нужно потратить 15 минут времени на чтение любой статьи на эту тему. Это просто концепция, которую многие современные разработчики понимают как SQL over Http.
    Основная идея - серверу пофиг на состояние клиента, всю необходимую информацию для выполнения запроса сервер должен получить за один запрос.
    Ответ написан
    8 комментариев
  • Как возвести в степень значение biginteger на biginteger?

    @cicatrix
    было бы большой ошибкой думать
    Никто в реальных реализациях такой фигнёй не занимается. Ты постигаешь основы криптографии, но забыл изучить раздел "модульная арифметика".
    https://ru.wikipedia.org/wiki/Возведение_в_степень...
    Само число ведь не нужно. Нужен остаток от деления по модулю.
    В противном случае тебе нужно будет реализовать класс, куда будут упаковываться числа нужной битности для 1024 бит тебе потребуется 16 long-ов. Ну и дальше - реализовать арифметику.
    Ответ написан
    Комментировать
  • Как передать тип связанного элемента в преобразователь (конвертер)?

    @cicatrix Автор вопроса
    было бы большой ошибкой думать
    Кому интересно будет - задолбался я с этими байндингами и решил "в лоб" через событие AutoGeneratingColumn(:

    private void DgRefTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        DataGrid dg = (DataGrid)sender;
        object src = dg.ItemsSource;
        Type type = src.GetType().BaseType.GetGenericArguments()[0];
        PropertyInfo property = type.GetProperty(e.Column.Header.ToString(), BindingFlags.Public | BindingFlags.Instance);
        if (property.IsDefined(typeof(RTFieldAttribute), true))
        {
            e.Column.Header = ((RTFieldAttribute)property.GetCustomAttributes(typeof(RTFieldAttribute), true)[0]).HeaderText;
        }
    }
    Ответ написан
    Комментировать
  • Как остановить выполнение по достижению времени?

    @cicatrix
    было бы большой ошибкой думать
    Если код синхронный без многопоточности, то
    var t = DateTime.Now;
    var interval = new TimeSpan(0,3,0);
    while(DateTime.Now - t < interval)
    {
     \\ ...
    }

    Если асинхронный или методы долгие, то по таймеру.
    Ответ написан
    Комментировать
  • Как мне переделать код на Windows forms чтобы он считал количество букв в каждом слове?

    @cicatrix
    было бы большой ошибкой думать
    Ну если в лоб делать так, как написано в условии, то:
    string input  = "Раз два три четыре пять, я иду искать";
    string[] words = input.Split(new char[] { ' ', ',', '.', '-', '!', '?' }, StringSplitOptions.RemoveEmptyEntries);
    foreach(var word in words) { Console.WriteLine($"{word}: длина {word.Length}"); }
    Ответ написан
  • Запрос отменён. Невозможно закрыть поток до завершения записи всех байтов?

    @cicatrix
    было бы большой ошибкой думать
    Такое чувство, что дело в Using.
    У объекта, который заключён внутри Using при выходе из него автоматически вызывается Dispose().
    И поток, в который ты записал POST данные, отправляется в сборщик мусора, ещё до отправки.
    SW тебе вообще не нужен, если ты туда байты записываешь, можно и сразу в поток писать.
    В общем, убери using и явно вызывай Dispose после завершения запроса.
    Ответ написан
    Комментировать
  • Как найти строку после символа?

    @cicatrix
    было бы большой ошибкой думать
    using System;
    using System.Text.RegularExpressions;
    namespace ConsoleApp2
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                string input = "blablabla print('Test 1'); blabla print('Test 2')";
                string pattern = @"print\(\'([^\']*)\'\)";
                foreach (Match m in Regex.Matches(input, pattern))
                {
                    Console.WriteLine(m.Groups[1].Value);
                } // foreach
                Console.ReadLine();
            } // Main
        } // class Program
    } // namespace


    Вывод:
    Test 1
    Test 2
    Ответ написан
  • С чего начать создание простой игры?

    @cicatrix
    было бы большой ошибкой думать
    Со сценария (я серьёзно).
    Потом бумажные эскизы основных экранов, полное описание механики игрушки (как движется персонаж, что он делает, какое у него там здоровье, чем и в кого стреляет, какие апгрейды бывают и т. д.).
    Потом поэтапно - под каждый пункт описания продумывается алгоритмическая реализация.
    Потом выбирается платформа (движок). Изучается документация, можно ли (сложно ли) реализовать на этом движке всё задуманное. Возможно, на этом же этапе стоит подумать о создании графических элементов дизайна, пользовательского интерфейса и пр. Хотя бы в виде "болванок", которые впоследствии должны будут быть заменены на нормальную графику.
    ...
    Вот примерно после этого можно начать писать какой-то программный код по уже продуманным на предыдущем этапе элементам реализации.
    Ответ написан
    Комментировать
  • Как можно выполнять действие каждый кадр, или при изменении размера окна Windows Forms?

    @cicatrix
    было бы большой ошибкой думать
    Установи свойство Dock в значение Fill или закрепи текстбокс при помощи свойства Anchor
    Ответ написан
    Комментировать
  • Как сократить до 4 знаков после запятой, для cos2 и sin2?

    @cicatrix
    было бы большой ошибкой думать
    Решение вашей проблемы кроется в вашем же коде.
    Помедитируйте на эти строчки и спросите себя, почему i выводится в нужном формате, а SinCos - неотформатировано:
    Console.WriteLine("i = {0:f4}", i);
    Console.WriteLine(new SinCos(i));
    Ответ написан
    Комментировать
  • C# .net 3.1 произвольно закрывается программа, куда копать?

    @cicatrix
    было бы большой ошибкой думать
    В программу... какой вопрос, такой ответ.
    В логи винды глянь, там сообщения об ошибках в приложениях возникают. Ну и поподробнее бы узнать, что за программа, что делает, к каким ресурсам обращается.
    Ответ написан
    3 комментария