Задать вопрос
Ответы пользователя по тегу C#
  • Можно ли избавиться от "слипания" байтов при WriteAsync из TcpClient.GetStream()?

    @cicatrix
    было бы большой ошибкой думать
    Группы данных должны разделяться. Как это сделать - ваша задача. Обычно используют символ (сигнатуру)-терминатор, например \0, если длина передаваемых данных заранее неизвестна, либо символ (сигнатуру) начала новых данных, вслед за которой обычно пересылается длина передаваемого блока.
    Ответ написан
    Комментировать
  • Когда инициализируется статический метод?

    @cicatrix
    было бы большой ошибкой думать
    Метод не требует инициализации. Инициализации требуют поля/переменные.
    Внутри статического метода они инициализируются в момент первого вызова этого метода.
    Статический конструктор вызывается автоматически при создании первой внешней ссылки на переменные/поля класса.
    Статические поля инициализируются ДО вызова конструктора.

    А вообще, у вас сложный случай - надо смотреть, как это компилятор оптимизировал.

    If a static constructor (§10.12) exists in the class, execution of the static field initializers occurs immediately prior to executing that static constructor. Otherwise, the static field initializers are executed at an implementation-dependent time prior to the first use of a static field of that class.
    Ответ написан
    Комментировать
  • Что выбрать WPF или UWP?

    @cicatrix
    было бы большой ошибкой думать
    UWP предполагает распространение только через Windows Store, насколько мне известно (впрочем, могу ошибаться). Никаких особых преимуществ за ней мне неизвестно, я бы порекомендовал WPF.
    Ответ написан
  • Как открыть дефолтное контекстное меню для файла?

    @cicatrix
    было бы большой ошибкой думать
    Есть один нормальный путь, как это сделать - пользоваться встроенным в ОС механизмом.
    Вот здесь всё описывается:
    Use Shell ContextMenu in your applications

    Вот здесь ещё демо проект, там реализовано на C#:
    C-File-Browser
    Ответ написан
    Комментировать
  • Что читать по C#?

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

    @cicatrix
    было бы большой ошибкой думать
    Либо рисовать, либо GridView
    Ответ написан
    Комментировать
  • Почему рекурсия не прерывается после выполнения условия остановки?

    @cicatrix
    было бы большой ошибкой думать
    Хинт: гляньте на стэк вызовов. Вы выходите из функции и "поднимаетесь вверх" на уровень выше.
    То есть, ранее вы вошли рекурсивно в функцию recursion, затем она отработала и вышла на фрейм выше.
    Ответ написан
    Комментировать
  • Как разбить парсинг XML файла на несколько потоков в C#?

    @cicatrix
    было бы большой ошибкой думать
    Я смотрю, у вас какой-то XML ридер особый. Многое зависит от его реализации, а именно - его потокобезопасности.
    В принципе, у вас главный foreach можно распараллелить следующим образом:
    Делаем по шаблону "производитель-потребитель"

    Производитель у вас будет один - ваш ридер, который должен "поставлять" ссылки на отдельные узлы вашего файла. Потребителем должны стать потоки, хватающие первый попавшийся (и учтите это сразу - они будут хватать не по порядку, а именно - первый попавшийся узел) и парсящие их.
    Количество потоков подобрать под конкретное железо, либо (если есть желание заморочиться) можно сделать настраиваемым - начать с 4 потоков, считать среднюю скорость обработки узлов (кол-во узлов в минуту), вводить по одному потоку в минуту, измеряя, увеличилось ли время или уменьшилось. Если время увеличилось - возвращаем прежнее количество, если уменьшилось - добавляем ещё поток, пока не найдём оптимальный вариант.
    Ответ написан
    Комментировать
  • Где можно повысить навыки програмирования на языке c#?

    @cicatrix
    было бы большой ошибкой думать
    Для того, чтобы повысить навыки программирования, надо, как ни странно, ... программировать.

    Я не верю, что можно прочитать книжку и повысить навыки.
    Книги могут помочь, разумеется, но голая теория без практики - абсолютно бесполезная вещь.
    Навык программирования - умение решать поставленную задачу при помощи программного кода.
    Вот ставите задачу - написать программу/сайт/библиотеку, которые делают то-то и то-то. Начинаете писать.
    В процессе возникнет куча вопросов "а как сделать это", "а как сделать то", и т. д. Вот здесь уже тогда ищете материалы по решению конкретно этого "затыка" и двигаетесь дальше.
    По мере накопления в вашей голове коллекции решений конкретных задач, ваш навык программирования будет повышаться.
    Ответ написан
    2 комментария
  • Обязательно ли ключевое слово ref для передачи по ссылке?

    @cicatrix
    было бы большой ошибкой думать
    Без ключевого слова ref (out), параметр всегда передаётся по значению (by value).
    В языке есть ссылочные типы и значимые типы (reference type и value types) - вот тут объясняется, в чём разница.

    XElement - ссылочный тип. Вы передаёте адрес объекта (в памяти), иными словами - указатель на объект, иными словами - ссылку. Разумеется, при манипуляции с этой областью памяти, изменяется и сам объект.

    Отвечая на ваш вопрос, вынесенный в заголовок: для ссылочных типов - нет, не обязательно, для значимых типов - обязательно.
    Ответ написан
    7 комментариев
  • Как загружать изображение в базу данных MS SQL?

    @cicatrix
    было бы большой ошибкой думать
    Скорее всего, в тэге
    <form enctype="multipart/form-data" ... > ... </form>
    надо поставить.
    Или покажите код из контроллера.
    Ответ написан
    Комментировать
  • Как определить что я на главной странице?

    @cicatrix
    было бы большой ошибкой думать
    На главную страницу (cshtml) поместите скрипт (пример с JQuery):
    $( document ).ready(function() {
        $('main').addClass("container");
    });
    Ответ написан
  • (С#) Как работает цикл for в конкретном примере?

    @cicatrix
    было бы большой ошибкой думать
    При x=2:
    if (x <= 1) return false;
    for (int i = 2; i <= x / i; i++) //   2 > 1 - следующая строка не выолнится
        if ((x % i) == 0) return false;
    return true;
    Ответ написан
    1 комментарий
  • Стек технологий для разработки корпоративного приложения с desktop клиентом?

    @cicatrix
    было бы большой ошибкой думать
    Если браузерный клиент не принимается, зачем вам asp.net? Не web-ом единым жив TCP/IP.

    Уточните, нужен ли сервер вообще, если вся его задача сводится к функции прокладки между клиентом и базой данных, можно обойтись только клиент + серверная БД.
    Клиента пишите на чём угодно. Если в тэги C# поставили - логичный выбор WinForms (можете WPF, конечно, но смысла особого нет).
    Если сервер всё-таки нужен, то можно и windows service написать на том же C# (сервер = не обязательно web сервер)
    Ответ написан
    Комментировать
  • Как вызвать метод родителя родителя?

    @cicatrix
    было бы большой ошибкой думать
    Если вы можете модифицировать только метод C, то наследовать вам надо его от A. Тогда можно.

    // Наследуем C от B
      public class C : B
      {
          // Пользуемся функционалом B, унаследованным от B
      }
      // Добавляем надкласс, наследующий от A
      public class D : A
      {
         public C myBfunctional { get; set; } // Через это свойство получаем функционал B
         public void Method()
         {
             base.Method(); // Пользуемся методом, унаследованным из A
         }
      }
    Ответ написан
    2 комментария
  • Сочетание трех клавиш не работает?

    @cicatrix
    было бы большой ошибкой думать
    Сочетание из трёх клавиш возможно, если две из них - клавиши-модификаторы (Ctrl, Shift или Alt).
    Собственно, из двух клавиш возможно тоже только если одна из них - тот же модификатор.
    Для остального делаются "аккорды" (как, например, в Visual Studio - сначала жмётся Ctrl + что-то, программа ждёт продолжения "аккорда", команда выполняется, когда нажимается следующая клавиша).
    Ответ написан
    2 комментария
  • Как в C# можно на этапе подключения (до select) определить это sqlite3 база или какой то другой файл?

    @cicatrix
    было бы большой ошибкой думать
    SQLite Database File format

    См. п. 1.2 1.2. The Database Header
    Смещение 0, длина 16 байт строка: "SQLite format 3\000"
    Ответ написан
  • Как работают Логические выражение?

    @cicatrix
    было бы большой ошибкой думать
    У вас там не опечатка?
    Сильно похоже на обмен значениями через XOR, что по коварной задумке автора вопроса (из учебника?), должно было запутанно представлять собой следующее:
    x ^= y
    y ^= x
    x ^= y
    После этих трёх операций x и y обменяются значениями
    Ответ написан
  • [C#] Как работать с MeasureString в цикле?

    @cicatrix
    было бы большой ошибкой думать
    Ещё хинт: в простых случаях, можно MeasureString не вызывать а воспользоваться свойством Height самого шрифта.
    Из примера выше вот это:
    var iOneLineHeight = g.MeasureString("Z", fnt, wrapWidth, sfFmt).Height;

    эквивалентно этому:
    var iOneLineHeight = fnt.Height;

    Вопрос ещё такой - вы где всё это отрисовываете? WPF, Winforms? Системный оконный менеджер для этих целей сам может всё рассчитать. Float Container с ограничением по длине, а внутри набор Label с Autosize, в принципе, избавят вас от этих мучений.

    Имейте так же в виду, что MeasureString не гарантирует вам точных замеров ширины текста. Чтобы всё рассчитать точно, надо пользоваться MeasureCharacterRanges
    Ответ написан
    1 комментарий
  • StreamReader, как изменить позицию?

    @cicatrix
    было бы большой ошибкой думать
    Сетевые потоки операцию SEEK не поддерживают. Читай всё подряд в массив, а уже там выбирай нужное.
    Такое может прокатить только с File/MemoryStream

    Прежде чем устанавливать позицию, проверяй свойство Stream.CanSeek
    Ответ написан
    Комментировать