• Почему не работает foreach?

    @EvilBeaver
    упоротый гик
    Блин, что за адово нагромождение if/else, сделайте уже таблицу переходов. И где там у вас foreach, который не работает? Вы предлагаете нам самим его искать и угадывать тот ли это foreach? Если хотите получить ответ на вопрос, потрудитесь облегчить работу тем, кто будет отвечать.

    if (che.GetType().ToString().IndexOf("CheckBox") > -1)


    ААААА!!!!! Срочно напишите заявление об увольнении, ну нельзя же так, господи!!!
    Ответ написан
    3 комментария
  • Как передать в функцию переменное число параметров разного типа?

    lasalas
    @lasalas
    .NET Architect
    void MyFunc(string func, params object[] args)
    {
            var argTypes = Type.GetTypeArray(args);
            var methodInfo = this.GetType().GetMethod(func, argTypes);
            methodInfo.Invoke(this, args);
    }
            ...
            MyFunc("M2", 5, "строка");
    Ответ написан
    6 комментариев
  • Как передать в функцию переменное число параметров разного типа?

    @bmforce
    Как-то так должно сработать, если все методы находятся в одном классе.
    public void MyFunc(string methodName, params object[] list) 
    {
         MethodInfo mi = this.GetType().GetMethod(methodName);
         mi.Invoke(this, list);
    }
    Ответ написан
    1 комментарий
  • Можно ли использовать Model для взаимодействия с View вместо ViewModel?

    Nipheris
    @Nipheris Куратор тега C#
    Плюс в том, что структуру и интерфейс модели в больших проектах не хочется делать зависимым от вьюхи в какой бы ни было степени. Вот смотрите, у вас например есть атрибут Display или StringLength - зачастую такие вещи излишни в бизнес-модели. С этой моделью, возможно, будет работать код, вообще не имеющий ничего общего с выводом данных пользователю, например какой-нибудь фоновый бот или сборщик статистики. Или, что чаще встречается, с этой же моделью будет работать совершенно другое представление - например одна вьюха у вас "для всех", т.е. для клиентов, к примеру, интернет-магазина, а другая - для работников, которые обслуживают заказы. И у них те же данные о клиентах и заказах будут выводиться совершенно иначе.
    Поэтому как правило удобнее иметь промежуточный слой в виде ViewModel, которая "приближает" данные общей модели к конкретному представлению. Я, например, часто делаю именно во ViewModel различные вычисляемые свойства, которые нужно вывести куда-нибудь, да хоть в таблицу. Т.е. в бизнес-модели у меня расход топлива на километр, и пройденный путь, а во ViewModel помимо этого еще и общий расход топлива на текущий момент времени (который, разумеется, рассчитывается на лету).
    Ответ написан
    2 комментария
  • Кирилица в C# (JSON)?

    @Inv3go
    Конкретно это должно помочь.
    string json = Encoding.UTF8.GetString(client.DownloadData(url));

    А так же совет почитать об async/await чтобы сделать эти вызовы асинхронными и не вешать интерфейс при загрузке.
    Ответ написан
    Комментировать
  • Как перекомпилировать проект Microsoft Visual Studio?

    @Quanzi
    Разработчик .NET
    x86 - историческое название для 32-битной архитектуры.
    Цитата из Википедии:
    Название образовано от двух цифр, которыми заканчивались названия процессоров Intel ранних моделей — 8086, 80186, 80286 (i286), 80386 (i386), 80486 (i486). За время своего существования набор команд постоянно расширялся, сохраняя совместимость с предыдущими поколениями.

    Помимо Intel архитектура также была реализована в процессорах других производителей: AMD, VIA, Transmeta, IDT и др. В настоящее время для 32-разрядной версии архитектуры существует ещё одно название — IA-32 (Intel Architecture — 32).
    Ответ написан
    Комментировать
  • Книги по архитектуре веб приложений?

    qfox
    @qfox
    Ответы есть у меня
    Вопрос настолько обширный, что врядли кто-то вам сможет посоветовать актуальную литературу, т.к. нужны примеры.

    Большинство хороших архитектурных решений находится в постоянной разработке и люди, которые пишут книги, часто отстают лет на 5 от прогресса. А те, кто не отстает — находятся в творчесском процессе и им некогда писать книги.

    По теме могу посоветовать смотреть в сторону ruby/nodejs/go фреймворков для различных веб-приложений и сервисов, каждый фреймворк затачивается под определенную задачу и, если есть желание эффективно работать в этой сфере, вам так или иначе придется это делать — без чтения чужого кода и участия в разработке этих самых фреймворков сейчас никуда, и это полностью заменяет литературу по теме.

    Как пример, могу посоветовать сравнить www.sinatrarb.com (ruby), expressjs.com (nodejs) и martini.codegangsta.io (golang). Все они используют схему — создаем приложение, у приложения регистриуем обработчики для get/post/других запросов, в обработчиках получаем объекты request/response, и работаем с ними. Это считается базой для любых веб-сервисов, веб-приложений.

    Когда нужны какие-то дополнительные функции — все делается независимо от этих модулей внутри колбеков, которые в них регистрируются и там зоопарк очень большой. Если нужны контроллеры, модели — есть rails, compoundjs, beego. Если нужно сделать REST — обычно, берется синатра + доп. модули, и получается что-то вроде loopback.io

    Но, повторюсь, когда это все пишется у тебя на глазах, а цикл создания книги — год-полтора — то за это время технологии уже уходят далеко вперед и хороших книг с такой глубокой проработкой вопроса будет появлятся все меньше.
    Ответ написан
    5 комментариев
  • Как разобрать регулярное выражение?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Весь (и он же единственный) изюм — \1, что означает найденную ранее строку (ссылка на первый шаблон) (\w).
    Итог — условию удовлетворяет строка, не содержащая нескольких одинаковых символов (латинской буквы в любом регистре, арабской цифры или знака подчёркивания), и находящихся в любом её месте.
    Ответ написан
    8 комментариев
  • Как хранить в файле огромный массив объектов?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Каждому классу присвоить id (целое число), и написать для этого класса функции записи в бинарный поток и чтения из него. Записывать непосредственно значения полей.
    Если потребуется прямой доступ к объектам, то при создании файла отвести в начале место для ссылок на положение каждого элемента массива в файле, потом, по мере создания файла накапливать эти ссылки. В конце записать. Если прямого доступа не нужно - писать и потом читать все объекты подряд.
    Если структура классов будет меняться, и иногда потребуется читать старые файлы, надо предусмотреть номер версии, чтобы десериализатор класса мог его учитывать. Читать новый файл старой программой при этом не получится.
    Если есть информация о диапазонах значений полей, можно записывать меньше байтов, чем размер типа (например, для целых - два или три байта). Для массивов можно предусмотреть упаковки какими-нибудь разностными схемами.
    Ответ написан
    Комментировать
  • Как Достать часть из строки в c#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Раз пошла такая пьянка, предложу вариант без регулярных выражений:
    // входящие данные
    string data = "0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 39 ..............09";
    // получаем позицию первой найденной точки
    int endIndex =  data.IndexOf(".");
    // получаем позицию первого вхождения символов 00
    // с конца строки начиная с endIndex
    int startIndex = data.LastIndexOf("00", endIndex) + 2; // + размер искомых символов
    		
    // выделяем часть строки и удаляем лишние пробелы по бокам
    string result = data.Substring(startIndex, endIndex - startIndex).Trim();
    		
    // выводим результат
    Console.WriteLine(result);
    
    // можно одной строкой написать, но так проще понять

    Посмотреть, как это работает, можно тут.

    Регулярные выражения имеет смысл использовать, если шаблон поиска и/или данные будут сложными. В рамках текущего вопроса, все вроде бы просто, можно без потенциально опасных регулярных выражений обойтись (прожорливость, зацикливание).

    Еще вот такой можно сделать вариант:
    string data = "0x00 00 00 00 00 00 00 00 00 00 00 00 00 3D 12 7E ..............01";
    string result = data.Replace("0x", "").Replace("00", "").TrimEnd("0123456789.".ToCharArray()).Trim();
    Console.WriteLine(result);

    Или:
    string data = "0x00 00 00 00 00 00 00 00 00 00 00 00 00 3D 12 7E ..............00";
    string result = data.Substring(2).TrimStart("0 ".ToCharArray()).TrimEnd("0123456789.".ToCharArray()).Trim();
    Console.WriteLine(result);
    Ответ написан
    7 комментариев