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

    @gleb_kudr
    Не очень понятно, что именно вы спрашиваете.

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

    Например "Сергеев МСЧ" найдет всех сергеевых и фильтранет их по принадлежности к МСЧ. Так как у вас дерево, то чтобы такой поиск работал, нужно дочерним сущностям передавать все атрибуты родительских. Если я наберу просто "МСЧ", то получу всех людей у которых есть атрибут МСЧ. Соотественно, в словарь для поиска надо так же добавлять должность, и, возможно, номер.

    Рузальтатом поиска в TreeView, соотетстенно, должно быть другое TreeView где показаны только нужные результаты, но сохранена древовидная структура.
    Ответ написан
    Комментировать
  • Почему bool весит целый байт?

    @gleb_kudr
    Потому что байт - минимальная единица адресации в памяти.
    Ответ написан
    Комментировать
  • Как лучше сделать переодический вызов процедуры C# в static class?

    @gleb_kudr
    > Thread.Sleep
    Ох ох, не надо так делать.

    Есть прекрасный System.Timers.Timer, который и нужно использовать. Еще для таймеров можно использовать другой класс - System.Threading.Timer, вот статья в которой хорошо описаны их различия: msdn.microsoft.com/en-us/magazine/cc164015.aspx
    Ответ написан
    3 комментария
  • Как на C# экранировать спецсимволы из полученного массива json?

    @gleb_kudr
    csharpindepth.com/Articles/General/Strings.aspx вот это должно помочь.

    Если коротко, то экранируйте строки с помощью значка @ вот так. Оно экранирует все символы кроме двойных кавычек. Если в тексте встречаются значащие двойные кавычки, то их нужно поменять на две двойные кавычки.

    var text= @"Hello, ""mister""";
    //Результат

    Hello, "mister"
    Ответ написан
    Комментировать
  • Как, когда и нужно ли вообще закрывать connection к базе в singleton классе?

    @gleb_kudr
    В общем случае 1. Открытие коннекта - достаточно затратная процедура чтобы делать ее на каждый чих. Можете сами измерить скорость/нагрузку в тесте с открытием одного коннекта или множества коннектов.
    Ответ написан
    Комментировать
  • Бот для World of Tanks на C#?

    @gleb_kudr
    Есть принципиально два разных типа ботов.

    1. Перехват памяти или пакетов. Плюсы - достаточно мощные возможности, очень высокая скорость работы, многооконные режимы. Минусы - возможность обнаружения, неинтуитивность разработки.

    2. OCR (распознавание) + эмуляция действий игрока - мышь либо клавиатура. Плюсы - интуитивность разработки, сложность обнаружения. Минусы - проблемы с быстродействием, однооконный режим, частые ошибки распознавания.

    Для новичка рекомендую второй способ.
    Ответ написан
  • Как создать виртуальную файловую систему на C#?

    @gleb_kudr
    SQLite.

    Две базы. Один файл для индексов и поиска, второй для хранения тел файлов. С многопоточностью правда могут быть проблемы, но все остальное очень удобно.
    Ответ написан
    3 комментария
  • Как написать класс для работы с sqlite?

    @gleb_kudr
    Сохраните свой объект-обертку открытой БД в каком-нибудь глобальном классе и обращайтесь к нему когда надо. Синглтон это по поведению и по смыслу почти то же самое что глобальная переменная, можно не заморачиваться.

    Особенно с SQLite - она не держит многопоточность, поэтому поддержка более одного коннекшена вредна во всех случаях.
    Ответ написан
    Комментировать
  • Как реализовать коллекцию констант в C#?

    @gleb_kudr
    Думаю вот так можно. + Немножко рефлексии. Правда в енум придется включить все возможные варианты включая наследников.
    using System.Reflection;
    public class ConstCollection:Dictionary<MyConst,string>
    {
    public string A="a";
    public string B="b";
    
    public ConstCollection(){
      foreach (MyConst c in Enum.GetValues(typeof(MyConst))){
        MethodInfo m = this.GetType().GetMethod(c.ToString());
        if(m!=null){
          string cValue=(string)m.Invoke(this, null);
          this.add(c,cValue);
        }
      }
    }
    }
    public enum MyConst{
    A,
    B,
    C
    }
    Ответ написан
    Комментировать
  • Стоит ли использовать ASP.NET MVC для стартапа?

    @gleb_kudr
    Стоит использовать то, на чем вы быстро сможете реализовать задумку. Хоть вордпресс и бесплатный шаблон, если это решит вашу задачу. ASP.NET является полноценным веб-фреймворком и на нем можно сделать все то же самое, что и в других.
    Ответ написан
    Комментировать
  • В чём разница dynamic vs Object в C#.NET?

    @gleb_kudr
    dynamic это тот же object, просто игнорирует все проверки на тип во время компиляции. Соответственно, вы можете попытаться вызывать у него любые методы и среда вам даст скомпилировать такую программу. Далее методы вызываются по сигнатуре (имя + типы аргументов). Если у динамического объекта вызвать метод с сигнатурой, отсутствующей в реальном объекте, который упакован в этом динамике, то выпадет исключение рантайма.

    Простой пример.

    class First{
    public First(){}
    public void test(string str){}
    }
    
    class Second{
    public Second(){}
    public void test(string str, int i){}
    }
    
    static void Main() 
    {
    dynamic myObj=new First();
    myObj.test("some string");//ok
    myObj=new Second();
    myObj.test("some string");// runtime error, требуется сигнатура test(string,int). То же самое будет если вызвать не существующий метод
    }


    Ответ на ваш вопрос: попытавшись то же самое сделать с object вы не сможете скомпилировать данную программу, вам нужно будет пользоваться приведением типов.

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

    class First{
    public First(){}
    public void test(string str){}
    }
    
    class Second{
    public Second(){}
    public void test(string str){}
    }
    
    static void Main() 
    {
    object myObj=new First();
    (myObj as First).test("some string");//ok
    //myObj.test("some string"); такое не даст скомпилироваться
    myObj=new Second();
    (myObj as First).test("some string");// runtime error, требуется тип Second хотя сигнатура метода та же самая
    }
    Ответ написан
  • Как в c# правильно написать такой алгоритм?

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

    Поэтому - делайте if'ами, как сказано в соседних ответах и используйте проверки на null (самый распространенный вариант вызова исключения - обращение к несуществующему объекту). Если вложенные куски большие - запаковывайте каждый из них в метод или функцию - будет проще читаться.
    Ответ написан
    Комментировать
  • Почему многие принижают asp.net mvc и IIS?

    @gleb_kudr
    Ничем не плох, просто так сложилось. Ну и денег стоят лицензии если все делать на MS стеке, на php нет этого фактора.
    Ответ написан
    2 комментария
  • Каков план личностного развития C# программиста с нуля?

    @gleb_kudr
    Порядок такой:

    WinForms (хеллоу-ворды всякие)=>WPF=> ASP .net или какой-нибудь другой веб-фреймворк.

    Сильверлайт не надо, майкрософт его задушила.

    В принципе, вместо WPF можно WIndows Phone. То же самое почти что, зато можно заодно что-нибудь прикольное для телефона набросать. Можно и сразу на веб перепрыгнуть, но побаловаться с win forms полезно.

    Понравятся мобилки - уйдешь в Xamarin. Понравится веб - уйдешь в веб. Ну десктоп и сервера и так понятно.
    Ответ написан
    Комментировать
  • В чем лучше хранить числа в C#?

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

    @gleb_kudr
    Вот варианты:

    1. Наследование от одного класса
    2. Реализация одного интерфейса.
    3. Специальный класс-обертка, который умеет принимать на вход элементы вашего зоопарка и преобразовывать их в стандартный интерфейс к коллекции.

    И я не очень понимаю, чем вам не нравится приведение типов для доступа к уникальным полям. Это абсолютно стандартная практика.
    Ответ написан
  • Как спроектировать дизайн с дублированием элементов интерфейса на C#, WinForms?

    @gleb_kudr
    Для начала научитесь создавать элементы формы программно и вопрос отпадет сам собой. О том, как это делать, существует множество туториалов.

    В WPF данный функционал реализуется шаблонами, но ИМХО это достаточно сложно для понимания сходу, потренируйтесь для начала на генерации из кода.
    Ответ написан
    Комментировать
  • DataTable сортировка столбца типа String как число?

    @gleb_kudr
    С ошибкой все просто. Используйте Int32.TryParse

    Но лучше сразу использовать специальную конвертилку Convert.ToUInt32. Думаю, лучше этого тут уже будет не сделать.
    Ответ написан
    Комментировать
  • Что теряет разработчик под Android используя не родную Java, a C# Xamarin?

    @gleb_kudr
    Да ничего он не теряет. Знаете C# берите xamarin и вперед. Тем более, шарписты обычно от джавы плюются. Производительность такая же +-. Поддержка платформы полная. Про язык сами можете сравнить, Android это официально до сих пор Java 6 (хотя умельцы прикручивают версии посвежее на свой страх и риск). Если что, там даже нет Switch по строковым литералам.

    Ну и до кучи - среда разработки у Xamarin значительно приятнее чем бесплатный Eclipse.
    И да, я про промышленное качество.
    Сам я в основном под iOS пишу на ксамарине, но платформа отличная. Родные sdk я щупал и могу сравнивать. Слушать хай от тех, кто ее в глаза не видел просто противно.
    Ответ написан
    2 комментария
  • Чем в c# заменяют многомерные ассоциативные массивы?

    @gleb_kudr
    Если будете выбирать произвольные элементы из списка а не просто хранить, то не забудьте познакомиться кроме List с коллекциями типа HashSet и Dictionary. Бывают задачи, когда эта простая замена приводит к росту производительности в тысячи раз.
    Ответ написан
    2 комментария