Ответы пользователя по тегу C#
  • Как создать и редактировать файл .testsettings?

    @VanKrock Автор вопроса
    В общем оказалось, что шаблон для создания этого файла есть в visual studio enterprise. Как и шаплоны Coded UI Tests
    Ответ написан
    Комментировать
  • Как правильно обрабатывать Exception?

    @VanKrock
    Этот вопрос очень странный, тут все зависит от вас, если вы хотите показать пользователю ошибку, то вы ее показываете, если не хотите то не показываете. То же самое и с логами, если вам нужна запись об этой ошибке то вы ее записываете в лог, если не нужна то не записываете. Нужно понимать как пользователь будет работать с вашим приложением, что он будет делать в случае возникновения ошибок, к кому он будет обращаться например, кто будет разбираться с этой ошибкой, и какая информация понадобится этому человеку для того чтобы выявить и устранить проблему.

    Просто подумайте, а что и кому будет нужно. Если пользователь создает заявку, а у вас на обращении вылетело исключение, то нужно ли ему показать, что при регистрации прошла ошибка? Наверное нужно. Нужен ли ему подробрая информация о подключении и весь стек трейс? Наверное нет. Нужна ли подробная информация службе поддержки вашего приложения? Наверное да. Нужен ли службе поддержки стек трейс если они к коду доступа не имеют? Наверное не особо. А вот разработчику не помешает и стек трейс.

    Так что смотрите на свой бизнес-процесс решения проблем с вашим приложением.
    Ответ написан
    Комментировать
  • Как правильно работать с контекстом в Entity Framework?

    @VanKrock
    Лучше всего использовать IoC контейнеры, который будет управлять временем жизни контекста. Но если вы не используете контейнеры, то лучше создавать контекст на транзакцию.
    Ответ написан
    Комментировать
  • Что вы скажите про JavaScript под мобильные платформы?

    @VanKrock
    Почему не слышно? Один React Native чего стоит
    Ответ написан
    Комментировать
  • Какие есть ресурсы по .net?

    @VanKrock
    https://ulearn.azurewebsites.net/ - видеокурсы от Уральского Федерального Университета + СКБ Контур, очень рекомендую, там видео и тестовые задания на проверку усвоения курса.

    Книги:
    Рихтер "C# via CLR",
    Албахари "C# 5.0 Справочник" - "C# 5.0 in a Nutshell"
    Албахари "C# 6.0 Карманный справочник" - "C# 6.0 Pocket Reference"

    Ну и конечно документация msdn, а так же: github, stackowerflow и статьи на хабрахабре
    Ответ написан
    2 комментария
  • Как сделать сортировку по алфавиту?

    @VanKrock
    И еще можно сделать так (это не сортировка, но будет выводить 1 раз и 2 раза)

    temp += "Символ: "+ g.Key +" - "+ g.Count() + ((g.Count() % 10 > 1 && g.Count() % 10 < 5) && (g.Count() % 100 > 19 || g.Count() % 100 < 12) ? " раза" : " раз") +"\r\n";
    Ответ написан
  • Как правильно сделать запросы?

    @VanKrock
    using(SqlConnection sqlConnection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\mail.mdf;Integrated Security=True"))
    {
        using(SqlCommand cmd = new SqlCommand())
        {
        }
    }


    Никогда не используйте это
    catch { }
    Так вы помечаете код в блоке try, как бессмысленный и выполнится он или нет для вас не имеет значения

    Если хотите передать исключение выше то пишите хотя бы
    catch 
    {
        throw;
    }


    когда будете работать c возвращаемым SqlDataReader его тоже надо будет освобождать.
    Ответ написан
    Комментировать
  • Android клиент и C# сервер. Правильно организовать?

    @VanKrock
    Тут есть несколько вариантов, но если вам требуется держать соединение, посмотрите SignalR его можно использовать с ASP.NET WEB API или вы можете посмотреть в сторону NancyFx так же умеет работать в связке с SignalR
    Ответ написан
    Комментировать
  • Как подружить БД, StreamReader с потоком?

    @VanKrock
    Ну сразу бросается в глаза, что вы не освобождаете стрим, этот как минимум потенциальная ошибка утечки памяти.

    StreamReader openfile = new StreamReader(openFileDialog.FileName);


    я бы заменил на
    using (var openfile = new StreamReader(openFileDialog.FileName))


    дальше, вы открыли файл и выполняете операции над ним в вечном цикле - это тоже потенциально опасно утечкой памяти, по мне лучше открыть файл, что-то с ним сделать и закрыть, то есть сделайте OpenFileDialog над объявлением, а создание стрима уже внутри.

    SqlConnection и SqlCommand если не ошибаюсь тоже IDisposable их тоже следует обернуть в using, как и StreamReader - Ошибка с утечкой памяти скорей всего здесь.

    И еще момент, я бы не стал делать цикл while(true), обычно я делаю private переменную _needStop и цикл while(!_needStop). Это для того, чтобы если понадобится, написать метод Stop()

    Upd: немного посмотрел код ( используйте лучше FileStream вместо с StreamReader. Вот даже статью нашел metanit.com/sharp/tutorial/5.4.php FileStream вы хотя бы будете знать что там у вас с кодировками, а то всякое бывает.) хотя я в этом и не так уж уверен и со мной можно поспорить.
    Ответ написан
    Комментировать
  • Как заполнить документ excel средствами c#?

    @VanKrock
    Я использовал у себя SpreadsheetLight
    Устанавливается через Nuget, есть ньюанс, о котором хоть и написано написано в описании пакета, но я как-то упустил и долго мучался, требует установки (тоже через Nuget) OpenXml причем версии 2.0 (не 2.5) поэтому при установке OpenXml в Nuget выберите версию пакета 1.0 тогда установится OpenXml 2.0.
    Ответ написан
    4 комментария
  • Как можно обойти ограничение API VK?

    @VanKrock
    Вы рассылаете одинаковое сообщение вк считает такое спамом
    Ответ написан
    Комментировать
  • Почувствовал себя джуном, что делать дальше?

    @VanKrock
    Паттерны прочитай в любом случае, читай и одновременно реализуй на практике каждый паттерн, почитай Рихтера "C# via CLR", почитай Макконела "Совершенный код", напиши программы для решения каких-нибудь проблем
    Ответ написан
    Комментировать
  • Правильная разработка программного обеспечения!?

    @VanKrock
    А тут вложенность и не нужна.
    Вот у вас есть сущность Компания (Company) в вашей компании разве есть страны? Нет, у нее есть офисы (Office)
    А у офисов уже есть адрес (Address) какой то конкретный и на все остальные ему как бы пофиг поэтому вложенность тут не нужна, она понадобится при заполнении например чтобы показать dropbox пользователю, для этого сделайте AddressDataBase какой-нибудь со вложенностью адресов. И у обычно если много офисов, то у них указывают контактные данные

    то есть
    class Company
    {
        public List<Office> Offices {get; set;}
        public string Description {get; set;} //Тут описание вашей компании: год основания там и все такое.
        public Contacts GlobalContacts {get;set;} //Глобальные контакты для всей компании
    }
    
    class Office
    {
        public Address Address {get; set;}
        public List<Employee> Employees {get; set;}
        public List<Tour> Tours {get;set;}
        public Contacts Contacts {get;set;}
    }
    
    class Address
    {
        public string Country {get;set;}
        public string City {get;set;}
        public string Street {get;set;}
        public string HouseNumber {get; set;}
    }
    
    class Tour
    {
        public string Country {get; set;}
        public string City {get; set;}
        public Hotel Hotel {get; set;}
    }
    
    
    class Hotel
    {
        public string Description {get;set;}
        public Address Address {get; set;}
        public List<Image> Images{get; set;}
    }


    Ну и конечно сделайте конструкторы.

    Инициализация офиса будет такой

    var office = new Office(
                    new Address(country, city, street, houseNumber), 
                    new List<Employee>(),
                    new List<Tour>(),
                    new Contacts { Email = "office@mail"} 
                    );
    Ответ написан
    7 комментариев
  • Continuous Integration для open-source проектов на .NET (C#)?

    @VanKrock
    А чем вам TeamCity не угодил? Какая гуглоформа? И остальные продукты от JetBrains. Resharper это уже как плагин по-умолчанию у разработчиков на C#.

    Имхо TeamCity + Resharper & Co (остальные инструменты) + (NUnit + Moq) Джентльменский набор так сказать.
    Ответ написан
    2 комментария
  • Как сделать так чтобы код выполнялся после того как загрузится страница в элементе webBrowser C#?

    @VanKrock
    Вам не обязательно дожидаться полной загрузки страницы, на ней ничего интересного нет, я делал так
    webBrowserAuth.Navigated += (sender, e) =>
                    {
                        if(e.Url.GetLeftPart(UriPartial.Query) == "https://oauth.vk.com/blank.html")
                        {
                            var url = new Uri(e.Url.AbsoluteUri.Replace('#', '?'));
                            var parameters = HttpUtility.ParseQueryString(url.Query);
                            var accessToken = parameters.Get("access_token");
                            var expiresIn = parameters.Get("expires_in");
                            var userId = parameters.Get("user_id");
                        }
                    };


    Полностью код всплывающей формы c WebBrowser для аутентификации VK
    public Vk Authorize()
            {
                var form = new Form { Width = 800, Height = 600 };
                var vk = new Vk();
                var thread = new Thread(() =>
                {
                    var browser = new WebBrowser { Parent = form, Dock = DockStyle.Fill };
    
                    var authLink =
                        $"https://oauth.vk.com/authorize?client_id={_appId}&display=popup&redirect_uri=https://oauth.vk.com/blank.html&scope={_scopes}&response_type=token&v=5.37";
                    browser.Navigate(authLink);
    
                    browser.Navigated += (sender, e) =>
                    {
                        if (e.Url.GetLeftPart(UriPartial.Query) == "https://oauth.vk.com/blank.html")
                        {
                            var url = new Uri(e.Url.AbsoluteUri.Replace('#', '?'));
                            var parameters = HttpUtility.ParseQueryString(url.Query);
                            var accessToken = parameters.Get("access_token");
                            var expiresIn = parameters.Get("expires_in");
                            var userId = parameters.Get("user_id");
                            vk = new Vk(accessToken, expiresIn, userId);
                            form.Close();
                        }
                    };
                    form.ShowDialog();
                });
                thread.SetApartmentState(ApartmentState.STA);
                thread.Start();
                thread.Join();
                return vk;
            }
    Ответ написан
  • Почему не проходит программная авторизация в vk.com через oauth, но без браузера?

    @VanKrock
    Если вы хотите авторизацию по логину и паролю, можете использовать https://vknet.github.io/vk/authorize/
    Но у этого есть ряд проблем, например 2х факторная аутентификация не работает, как в принципе и в вашем коде.
    Самое лучшее все таки использовать форму с браузером.
    Ответ написан
    Комментировать
  • C# Paralllel.ForEach in Parallel.ForEach. Имеет ли смысл?

    @VanKrock
    Мне кажется, что в данном случае вы упретесь в чтение с диска
    Ответ написан
    Комментировать
  • Можно ли написать игру через ASP.net mvc c AJAX?

    @VanKrock
    Если вы хотите C# на сервере и интерактивный клиент, то лучше для этого использовать SignalR
    Ответ написан
    Комментировать
  • Где хранить IoC контейнер?

    @VanKrock
    Если это будет ApplicationContainer, то можно реализовать синглтоном.
    Ответ написан
    Комментировать