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

    @Oxoron
    Шарпер
    Был подобный вопрос про книги на Тостере. Здесь мой развернутый ответ.
    Если вкратце: ты выбрал правильные книги и правильный порядок. Разве что, Шилдта стоит поискать 5 издание, а Троелсена читать на английском - перевод ругают.
    Кроме того, для работы вполне достаточно первой части Шилдта (до потоков).
    Так же обрати внимание, что в этих книгах рассматривается, в основном, сам язык, его синтаксис. Помимо этого программист частенько занимается тестированием (как минимум модульным), проектированием, работой с системами контроля версий, работой с БД. В случае с .NET (C#) БД скорее всего лежит на MS SQL Server.

    Так что после первой половины Шилдта рекомендую написать Unit-tests (модульные тесты) на один из своих проектов (в качестве литературы гугли Art of Unit Testing, для начала хватит первых нескольких глав), написать несколько модульных тестов с MS Fakes (Shims, Stubs), почитать про рефакторинг, например, тут, завести профиль на Гитхабе, закинуть туда один из своих проектов, сделать несколько коммитов. Для работы с БД используются либо родные классы .NET (C#), либо EntityFramework, NHibernate, etc.
    Важно все перечисленное в этом абзаце выполнять после освоения первой части Шилдта. До этого у тебя скорее всего не будет проектов, для которых нужны подобные навыки.

    .NET и C# в названиях подобных книг почти равнозначны. Если проводить (очень грубую) аналогию, платформа .NET - это ассемблер, в нем все кодируется байтами (ну, или ноликами и единичками). Так программировать неудобно. Поэтому есть несколько ЯП (C#, VB6, в некотором роде PowerShell), которые свой код переводят в байты .NET кода. Для начала можешь считать, что .NET и C# это одно и тоже, понимание разницы придет со временем (либо прочтением Троелсена).

    Удачи.
    Ответ написан
    1 комментарий
  • Какой путь развития выбрать?

    @Oxoron
    Шарпер
    Сетевые приложения - они разные.
    Для низкоуровневого программирования ни один из этих языков не затачивался.
    Для сервов - тоже вряд ли. Разве что UI-оболочки.
    Если речь идет про облака - тут уже есть некоторое преимущество у .NET, в виде Azure.
    Плюс, ASP-фреймворки, некоторым образом WCF.
    Так что .NET выглядит круче.

    С другой стороны, за java я внимательно не слежу, так что реквестируется Java-спец.
    Ответ написан
    Комментировать
  • Какую книгу/учебник Вы бы предложили для изучения C# от уровня новичка до профессионала?

    @Oxoron
    Шарпер
    С каких книг начать изучение C#!?
    В ответах мой (относительно) подробный разбор, плюс обсуждение от других участников, плюс ссылка на блог Теплякова с подробной статьей.
    Кстати, советую после первой книги вторую читать на английском. Смысл будет понятен, чувство языка придет. Для простых задач язык не важен, для сложных ответа на русском может и не быть.
    Ответ написан
    1 комментарий
  • Существуют ли функции для работы с массивами на C#?

    @Oxoron
    Шарпер
    Еще есть Linq.
    professorweb.ru/my/LINQ/base/level1/info_linq.php
    В частности, Linq to objects.
    Ответ написан
    Комментировать
  • Как сделать модальное окно с input text в C#?

    @Oxoron
    Шарпер
    www.cyberforum.ru/csharp-net/thread50262.html - одно из решений.
    www.cyberforum.ru/csharp-beginners/thread560205.html - тут еще немного, плюс сохранение в DLL (на будущее).
    Можно еще подключить InputBox из станадртной VB библиотеки.
    Ответ написан
  • Чем плох enum в C#?

    @Oxoron
    Шарпер
    Если не секрет, а какая альтернатива? Байты использовать (инты)?
    Могут возникнуть заморочки при изменениях кода, когда пары Строковое обозначение - байтовое значения меняются, но это редкость и лечится обязательной простановкой числовых значений при объявлении enum-а.
    Ответ написан
    1 комментарий
  • Нужно ли использовать структуры в C#?

    @Oxoron
    Шарпер
    Не факт, что получите прирост производительности. Многое зависит от операций над листом. У структур по умолчанию медленное сравнение (привет рефлексии), например. Если вам придется много перемещать ваши объекты, тоже преимущество за классами (привет ссылочным типам).
    Информация к размышлению: при работе с LINQ часто используются анонимные типы; они как раз наследуют от class.
    И вдогонку, есть правило: никогда не используйте структуры, если четко не знаете, зачем оно вам надо.
    Ответ написан
  • Почему после выполнения INSERT отсутствуют данные в таблице?

    @Oxoron
    Шарпер
    Видимо, у вас поля deutch, russich тоже должны быть уникальными. Плюс, что значит, "открываю таблицу через MS". Там по-разному можно извратиться, в т.ч. увидеть лишь структуру.

    Вообще, если БД небольшая и несложная, рекомендую поставить EF или NHibernate. Простейшая установка и изучение займет пару-тройку часов, потом жить станет сильно проще.
    Ответ написан
  • Как продолжить выполнение кода после отображения формы?

    @Oxoron
    Шарпер
    У второй формы есть событие OnClose().
    У первой формы создаете открытое поле bool secondFormShowed.
    У второй создаете поле readonly Form1 Creator, создаете конструктор
    public Form2 (Form1 frm) 
    {
    Creator = frm;
    // Тут еще инициализация компонентов, создается по умолчанию. Что-то вроде InitializeComponents()
    }


    Перегружаете событие OnClose() у формы Form2, там вписываете
    Creator.secondFormShowed = true;

    Получите код вроде
    using(Form2 waitForm = new Form2(this))
    {
    this.secondFormShowed = false;
    this.Enabled = false;
    waitForm.Show();
    while(!this.secondFormShowed)
    {
    Thread.Sleep(1000); // Пока переменная не установлена в true второй формой
    }
    MessageBox.Show("test");
    this.Enabled = true;
    }


    Ориентироваться на Owner мне несколько стремно, мало ли где он потом изменится. Однако можно использовать и его вместо Creator.

    Плюс, как более сложный с непривычки вариант, смотрите свой предыдущий вопрос и мой ответ, про механизм событий.
    Ответ написан
  • Кто может дать пример парсинга json в C#?

    @Oxoron
    Шарпер
    internal static class Serializer
        {
            internal static void Serialize<T>(this T arg, string fileName)
            {
                string res = JsonConvert.SerializeObject(arg, Formatting.Indented);
                File.WriteAllText(fileName,res);
            }
    
            internal static T Deserialize<T>(string fileName)
            {
                string json = File.ReadAllText(fileName);
                T res = JsonConvert.DeserializeObject<T>(json);
                return res;
            }
        }

    Этот класс сериализует\десериализует объекты.

    public class Item 
    {
    ...
    public string title{get; set;}
    public string url{get;set;}
    ...
    }

    Это класс одной записи. Для сериализации используйте автосвойства (те самые get; set;), обязательно public.

    public class Response
    {
    public int count{get;set;}
    public List<Item> items{get; set;}
    }


    Для получения данных используете код вроде
    string pathToFIle = @"C:\temp\anyFile";
    Response response = Serializer.Deserialize<Response>(pathToFile);
    String[] titles = response.items.Select(item => item.title).ToArray(); // Массив названий
    String[] urls = response.items.Select(item => item.url)ToArray(); // Массив адресов


    библиотека: newtonsoft.json.dll

    Если надо - могу скинуть готовый пример (на тостере есть личка?).

    Также посетите json2csharp.com
    Вставьте в поле свой Json-образец, сразу получите необходимые классы.
    Ответ написан
    10 комментариев
  • Никак не могу разобраться с Json в c#?

    @Oxoron
    Шарпер
    Regex - это достаточно стандартное средство? Если нет - можно юзать String.Split() по кавычкам.
    Но вообще, вариант Pavel Osadchiy мне нравится больше всего (вторая его часть):
    А вообще лучше создать класс, в который можно десериализовать json. И потом десериализуем в него с помощью Newtonsoft .Json
    Ответ написан
    Комментировать
  • Вопрос об учёбе, WInRT, C# и всего такого прочего?

    @Oxoron
    Шарпер
    С чего начать изучение C# (литература) - был вопрос С каких книг начать изучение C#!?
    Там же указаны курсы MVA и еще пара ресурсов.

    Насколько важно знание .NET?

    Изучая C#, вы некоторым образом изучаете .NET. Первое время можно вообще не заморачиваться.
    Ответ написан
    Комментировать
  • Как остановить выполнение кода и продолжить его после определенных условий?

    @Oxoron
    Шарпер
    Сделайте в форме2 событие OnConcreteButtonPressed. В первой настройте обработчик (в Вашем случае doSomething), создайте вторую форму, подпишитесь на событие, откройте вторую форму.
    В форме1 будет код вроде
    Form2 f = new Form2();
    f.OnConcreteButtonPressed += doSomething;
    f.Show(); // лучше f.ShowDialog();

    MessageBox() внесите в doSomething().
    Во второй форме при нажатии на кнопку генерируйте событие OnConcreteButtonPressed.
    Ответ написан
    3 комментария
  • Как реализовать выполнение очереди комманд в дочернем потоке?

    @Oxoron
    Шарпер
    Используйте mutex, locker, или любой другой механизм блокировки (в обоих методах).
    Ответ написан
  • Как оптимизировать Serial.WriteLine?

    @Oxoron
    Шарпер
    Вижу два возможных затыка.
    1. В методе отсылается лишь одно сообщение. Значит, метод вызывается порядка 115 тысяч раз в секунду (не уверен, что правильно назвал цифру, но суть понятна). Можно замерить число сообщений в очереди, и передать его методу Sender(). Получится
    void Sender(int messageQty)
            {
                    for(int i=0; i< messageQty; i++)
                    {
                            Serial.WriteLine((string)sd.Dequeue());
                    }               
            } // Интересно, вызовы Dequeue можно избежать? Каким-нибудь foreach или другой структурой? Или они вообще не фатальны?


    2. У вас есть каст к строке, (string)sd.Dequeue(). Он тоже отжирает время. Если есть возможность, используйте Queue<string>. Как вариант, можете попробовать использовать sb.Dequeue().ToString()
    Ответ написан
    Комментировать
  • Как повысть скорость записи случайных блоков?

    @Oxoron
    Шарпер
    Seek() назад гораздо медленнее Seek() вперед. Попробуйте заменить
    fs.Seek(rnd.Next(0, len / 4) * 4, SeekOrigin.Begin);
    на
    fs.Seek(len-4*i, SeekOrigin.Begin);
    , совсем разочаруетесь.

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

    @Oxoron
    Шарпер
    Обязательно ли менять весь метод? Если очень надо - можете воспользоваться Extension методами. Можно попробовать унаследовать класс, и переопределить метод.
    Ответ написан
    Комментировать
  • Как зашифровать файл?

    @Oxoron
    Шарпер
    Зависит от шифра. Простейший код:
    static void Encrypt(string pathToFile)
    {
    byte[] bytes = File.ReadAllBytes(pathToFile);
    for (int i = 0; i < bytes.Length; i++)
    {
    bytes[i] = (byte)(bytes[i] + 128);
    }
    File.WriteAllBytes(pathToFile,bytes);
    }
    Этот же метод дешифрует файл.
    Upd. Пардон за выравнивание, можно глянуть тут: pastebin.com/uq9kSptp
    Ответ написан
    Комментировать
  • Проектирование двух схожих классов, разделяющих множество свойств и методов (но не всех)?

    @Oxoron
    Шарпер
    Так как пароль не нужен одному из принтеров, незачем вносить его в методы интерфейса (абстрактного класса). Проще передавать в конструкторе конкретного наследника.
    При желании, можно сделать необязательным параметром.
    Ответ написан
    Комментировать
  • Каковы причины возникновния интерфейсов в c#?

    @Oxoron
    Шарпер
    Помимо множественного наследования, интерфейсы позволяют создавать иерархии для структур. В Шарпе структуры запечатаны (sealed), и потому могут наследовать лишь от интерфейсов.
    Ответ написан
    Комментировать