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

    tomnolane
    @tomnolane
    профессиональный разработчик
    DRY, KISS ваше все.
    Остальное придет с опытом, особенно когда будете работать в команде
    Ответ написан
    Комментировать
  • Чистый код на C#, каким способом добиться?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Ни по каким книгам вы не научитесь писать "чистый код". Так как это умение приобретается только на практике, причем на практике в команде, где есть коллеги со знаниями/умениями выше, чем у вас. Где ваш код будут миллион раз проходить code review и вы в 100500 раз будете переделывать то, что написали. И только (может) тогда, будете писать чисто и грамотно. Хотя это утопия... и у крутых программистов глаз замыливается и не замечают какие-то косяки, опечатки, огрехи. Только в коллективе, с коллективом вы узнаете что такое "чистый код".
    Pull request'ы Open source проектов в помощь

    Знать какие буковки писать, в каком порядке, скобочки, где табы/пробелы и пр. это не "чистый код".

    5e3870094d639801170551.jpeg
    Ответ написан
    3 комментария
  • Куда пропал конструктор Visual Studio?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Раскройте файл Form1.cs (нажмите на стрелку слева от файла) и там кликните левой кнопкой мыши два раза на Form1.Designer.cs

    +

    на скрине вижу, что что-то также называется Form1 но без расширения (предпоследний на скрине)... может переименовали что-то?. Если уж совсем не помогло -> создайте новый проект и скопируйте заново код
    UPD:
    +
    5e2a7bc70ba76406263976.jpeg
    найдите нечто похожее: Restore workspace
    UPD:
    +
    Обратите внимание на второй файл Form1 (без расширения). Что это за файл? Может он мешает?
    Ответ написан
    3 комментария
  • Почему WebClient на c# скачивает с прерываниями и медленно?

    tomnolane
    @tomnolane
    профессиональный разработчик
    webClient.Proxy=GlobalProxySelection.GetEmptyWebProxy();


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

    UPDATE:

    Вот ссылка на рекомендуемую либу для скачивания видео с youtube. Если посмотреть исходники - там как раз используют System.IO.Stream
    Ответ написан
  • Есть ли смысл разрабатывать приложения для Андроид на C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    если Angry Birds вас вдохновляет - Welcome!

    ps тут ЯП особо не важен, важно что дальше будете с приложением делать
    можно написать нереально крутую игрую а-ля "Quake 2077" на Go, C#, C++ и пользоваться будут только вы и ваши знакомые, а можно склонировать морской бой на javascript с гитхаба и загребать лопатами капусту...
    Ответ написан
    2 комментария
  • Для написания полноценного телеграм бота на c# надо юзать ASP.NET?

    tomnolane
    @tomnolane
    профессиональный разработчик
    бота можно написать хоть на чём угодно, зависит от "хотелок" и возможностей.
    ASP.NET лишь одно из средств (но не самое нужное для этого).
    ASP используют для серьезных web приложений, для каких-то широких целей. Создавать бота только используя ASP не рационально. Для этих целей подойдет и что-нибудь попроще - php, node.js...

    но если предполагается использовать под сервис, где к боту будут обращаться 1кк раз в сутки, то да.. можно и на ASP
    также можно для знакомства с ASP (и c#) (частью функционала) можно попробовать... Опять же зависит от потребностей и возможностей

    п.с. если хостинг в РФ (российский IP) помоем телеграмм не будет работать из-за роскомнадзора... понадобится прокси/VPN/зарубежный VPS
    Ответ написан
    Комментировать
  • Есть ли в c# удобная функция поиска массива байтов внутри другого массива байтов?

    tomnolane
    @tomnolane
    профессиональный разработчик
    ??
    static int SearchBytes( byte[] haystack, byte[] needle ) {
        var len = needle.Length;
        var limit = haystack.Length - len;
        for( var i = 0;  i <= limit;  i++ ) {
            var k = 0;
            for( ;  k < len;  k++ ) {
                if( needle[k] != haystack[i+k] ) break;
            }
            if( k == len ) return i;
        }
        return -1;
    }
    Ответ написан
    3 комментария
  • Как полностью очистить массив?

    tomnolane
    @tomnolane
    профессиональный разработчик
    используйте статический класс Array с методом Resize от самого msdn
    var myArray = new int[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    Array.Resize(ref myArray, 0);
    Ответ написан
    Комментировать
  • Возможно ли создать универсальный парсер html на .net?

    tomnolane
    @tomnolane
    профессиональный разработчик
    если вы под
    универсальный парсер новостей на c #
    подразумеваете: написать код один раз и дальше его использовать для разных новостных сайтов, то нет
    если написать код сразу под конкретные сайты, то "почти" да, возможно. Но могуть быть миллион и одна проблема в архетиктуре самого сайта, к примеру:
    достаточно попробовать пропарсить сайт госзакупок и сразу поймете о чем я.
    Или к примеру собрать БД по автомобилям: чтобы под каждую категорию, версию, модели, комплектации авто были все данные.

    Возможно ли чтобы он работал на большинстве сайтов

    НЕТ, работать будет если под каждый сайт делать свой парсер, либо будет "много мусора" собираться: реклама, отзывы, соседние блоки, либо браться часть контента, либо браться совсем не то...
    Ответ написан
    9 комментариев
  • Как правильно дождаться выполнения всех потоков, созданных в цикле?

    tomnolane
    @tomnolane
    профессиональный разработчик
    оффтоп
    люди подписались чисто поглазеть или поржать?

    вы уверены, что вам нужен Thread?
    Task или Thread в C#.NET 4.0 WPF? ( Павел Елизарьев доступно описал разницу в ответе)
    я бы использовал Task для начала, т.к. есть такая замечательная штука, как пулл потоков (подзабыл как на английском называется) который лучше обычного программиста (автоматически) понимает, когда и кто закончил, сколько есть свободных, сколько нужно и что с ним дальше делать. И нужно у вас в коде делать акцент не на блокирование/синхронизацию потоков (оставьте их в покое - чем быстрее сделают, тем лучше), а использовать вот такую простую штуку: Оператор lock
    а зависание происходит потому, что вы и основной поток блокируете.
    Ключевое слово lock не позволит ни одному потоку войти в важный раздел кода в тот момент, когда в нем находится другой поток. При попытке входа другого потока в заблокированный код потребуется дождаться снятия блокировки объекта.
    Ответ написан
    1 комментарий
  • Как в C# выполнить JavaScript-код и вернуть результат (без браузера)?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Ответ написан
    Комментировать
  • Есть адекватная альтернатива Visual Studio?

    tomnolane
    @tomnolane
    профессиональный разработчик
    увы... (если про шарп)
    Ответ написан
    Комментировать
  • Как сделать возвращение к началу программы?

    tomnolane
    @tomnolane
    профессиональный разработчик
    есть три варианта:
    1) использовать метку
    M:
    if (att == 1) {
    //или тут M:
    Console.WriteLine ("Вы использовали обычную атаку");
    Console.WriteLine ("Урон: " + attack);
    Console.WriteLine ("У врага осталось: " + (ehp - attack) + "хп");
    Console.WriteLine ("Враг вас убил, попробуйте еще раз")
    goto M; //(Здесь должен быть банальный рестарт программы.)
    }

    2) сделать функцию отдельно (рекурсию)
    private void MyFunc(bool stop = false;)
    {
    if(stop) return;
    if (att == 1) { 
    Console.WriteLine ("Вы использовали обычную атаку");
    Console.WriteLine ("Урон: " + attack);
    Console.WriteLine ("У врага осталось: " + (ehp - attack) + "хп");
    Console.WriteLine ("Враг вас убил, попробуйте еще раз")
    MyFunc(); //(Здесь должен быть банальный рестарт программы.)
    }
    }

    3) использовать цикл for (бесконечный)
    int damage = 100;
    for(;;)
    {
    if (att == 1) { 
    Console.WriteLine ("Вы использовали обычную атаку");
    Console.WriteLine ("Урон: " + attack);
    Console.WriteLine ("У врага осталось: " + (ehp - attack) + "хп");
    Console.WriteLine ("Враг вас убил, попробуйте еще раз") 
    }
    hp < damage  ? break : continue; //(Здесь должен быть банальный рестарт программы.)
    }


    upd
    На свой лад накидал в некоторых местах условия выхода из метода/цикла. Поскольку по вашему коду не понятно, в каком случае должно всё это прекратится, поэтому условие, когда всё должно закончится - сами подкорректируйте. Главное, выше три способа, полностью отвечают на ваш заданный вопрос.
    Ответ написан
    5 комментариев
  • Лучшие ресурсы по многопоточности в C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    быстрее всего будет на youtube чтобы понять основу:
    (очень понятно, по русски, наглядно и доходчиво)
    тык (часть 1)
    тык (часть 2)
    тык (часть 3)
    и т.д. ...
    когда освоите и поймете, юзайте книги
    Ответ написан
    Комментировать
  • Какие книги и курсы по C# необходимо изучить каждому новичку?

    tomnolane
    @tomnolane
    профессиональный разработчик
    рекомендую ознакомиться со всеми ссылками, которые я привожу
    Изучаю C# по видеукурсам — какая лучше литература?
    Ответ написан
    Комментировать
  • Как создать WPF окно в Dll?

    tomnolane
    @tomnolane
    профессиональный разработчик
    стандартно... подключаете dll (add references)
    подключаете пространство имен using в вашем xaml.cs

    в любом удобном методе создаете новый экземпляр класса окна... далее SHOW(); ... профит...
    ------------------------------------------------------------------
    условно так:
    1) подключили dll
    2) в основном xaml.cs
    using MyWindowInDLL;
    
    ....
    ...
     public MainWindow()
            {
                InitializeComponent();
                var wind = new MyWindowInDLL.SuperWindow();
                wind.Show();
            }
    Ответ написан
    4 комментария
  • Страницы нет, но сервер возвращает "200", как в этой ситуации понять, что страницы все-таки нет?

    tomnolane
    @tomnolane
    профессиональный разработчик
    3a42bbeb01de4099b5dc0464d9b3331a.PNG
    страница есть... почему-же её нет?

    если указать
    string url = "https://XN--80APMGLWL.XN--P1AI/в/Москва/Мебельная_фурнитура/стр_11210";

    то тогда страницы действительно нет, и (у данного сайта) statusCode будет 302 (редирект на https://офирмах.рф/404.htm )

    UPD
    1) измените request.Method с HEAD на GET
    2) полный код:
    string url = "https://XN--80APMGLWL.XN--P1AI/в/Москва/Мебельная_фурнитура/стр_11210";
                int statusCode;
                string html;
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    request.AllowAutoRedirect = false;
                    request.Method = WebRequestMethods.Http.Get;
                    request.Accept = @"*/*";
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    statusCode = (int)response.StatusCode;
                    
    
                    using (StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                    {
                        html = stream.ReadToEnd();
                    }
                    response.Close();
    
    
                    if(!html.Contains("card"))  Console.WriteLine("страницы не существует");
                    else Console.WriteLine("страница существует!");
    
                }
                catch (WebException ex)
                {
                    if (ex.Response == null)
                        throw;
                    statusCode = (int)((HttpWebResponse)ex.Response).StatusCode;
                }
    
                //Console.WriteLine(url);
                //Console.WriteLine(statusCode);
                Console.ReadKey();


    profit
    Ответ написан
    Комментировать
  • Что должна возвращать функция в catch блоке?

    tomnolane
    @tomnolane
    профессиональный разработчик
    1) не обязательно в catch делать то, что функция должна возвращать:
    public static object Points(int a, int b)
            {
                int result  = 0;
                try
                {
                    //делаю что-то и падаю
                    return result;
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex.StackTrace); //выведи мне в Console описание ошибки
                } 
                return result;
            }

    2) есть такая шутка, которая называется finally
    int result  = 0;
                try
                {
                    throw new Exception(); 
                    return result;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.StackTrace);
                }
                finally
                {
                    result = -1;
                }


    которая выполниться в любом случае (в т.ч. и когда функция падает)

    Что должна возвращать функция в catch блоке?

    1) Информацию об ошибке
    catch (Exception ex)
                {
                    Console.WriteLine(ex.StackTrace);
                }

    2) либо присвоить значения выходного объекта (в вашем случае это string ..судя по примеру)
    catch 
                {
                    string result = "Ошибка";
                }

    3)можно и то и другое
    4) можно ничего не делать в catch (называется "заглушка")
    catch {}
    и после него return то, что нужно ретюрнуть
    Ответ написан
    Комментировать
  • Ошибка выдаваемая компилятором на олимпалном сайте?

    tomnolane
    @tomnolane
    профессиональный разработчик
    UPD
    ОТВЕТ (правильная функция вычисления палидрома)
    bool checkPalindrome(string inputString)
            {
                if (string.IsNullOrWhiteSpace(inputString))
                {
                    return false;
                }
                else
                {
                    char[] arr = inputString.ToCharArray();
                    Array.Reverse(arr); 
    
                    if (inputString == new string(arr))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    } 
                } 
            }

    а теперь что у вас:
    ca0b9f2917f44eedbb57d37e60561133.PNG
    у меня тоже падает при вводе слова var h = checkPalindrome("aaaabcaaaa");
    1) у вас массив str.ToCharArray(1, inputString.Length);начинается заполняется не с 0 индекса, а с 1-го!! от сюда array[0] у вас имеет значение null
    2) inputString.Equals( null) <- не годно, годно так: string.IsNullOrWhiteSpace(inputString) т.к. строка может содержать пробелы (много штук) и тогда строка точно не нуллъ будет

    вот так работает:
    static bool checkPalindrome(string inputString)
            {
                bool flag = true;
                string str = inputString;
                char[] array = str.ToCharArray(0, inputString.Length);
                if (string.IsNullOrWhiteSpace(inputString))
                {
                    return false;
                }
                else
                {
    
    
                    for (int i = 0; i < array.Length; i++)
                    {
                        while (array[i] == array[i + 1])
                        {
    
                            if (array[i] == array[-i]) //aaaabcaaaa
                            { 
                                return true;
                            }
                            else
                            { 
                                return false;
                            }
    
                        }
    
    
    
                    }
                    return flag;
                }
            }


    3) код неверный - он не вычисляет палиндром (точнее не верно вычисляет)
    Ответ написан
    Комментировать
  • Изучаю C# по видеукурсам - какая лучше литература?

    tomnolane
    @tomnolane
    профессиональный разработчик
    мои ответы, где (возможно) получите ответ на свой вопрос
    Нехватает знаний, язык c#?
    Если я пишу код на основе других, это плохо?
    и доп: тык


    Так вот, мне лучше сначала изучить книгу от Шилдта и смотря и учась программировать по видеурокам или сразу можно читать Троелсена?

    1) установить IDE (к примеру Visual Studio)
    2) смотреть видео уроки и тут же делать
    3) по любой книге - делать тоже самое, читаете и тут же в Visual Studio пробуете
    4) потом придумываете себе задачу (не глобальну, хотя бы создание калькулятора)- и пытаетесь сделать

    человек воспринимает лучше информацию, когда он: видит её (результат), может "пощупать"(сам своими ручками делает) и когда читает (всё вместе). Когда я начинал (только по книге Троелсена ) - не видя, не делая самим примеры в Visual Studio... т.е. только читая, а вообще что это такое и зачем оно надо... мой мозг сопротивлялся и не хотел запоминать полученную информацию. Что такое List или рефлексия?? Зачем? А когда стал смотреть видео курсы - я 1) понял, где это всё 2)как это выглядит 3) зачем это (почти понял)
    и потом снова стал читать книгу... и когда (наконец) 1-раз сел за visual studio и создал новый проект... я завис. Я не знал, что делать-то! Я всё забыл... боялся вообще что-то делать) хоть английский хорошо знаю - всё незнакомое, куча настроек, что нажимать...
    И пришлось пересматривать курсы заново.
    Так вот,
    1) смотрите курсы -тут же делаете в программе
    2) читаете книгу (время придёт, когда нужно будет) - тут же делаете в программе
    3) когда два пункта выполните - ставите задачу: как постить в ВК на стену (или фейсбук). Вводите в яндекс "постинг вконтакте c#", ищете код (или видеоурок) - копируете вставляете, получаете ошибку - и тратите кучу времени на доделывания (читаете документацию API ВК и там же регистрируетесь как разработчики), читаете про WebRequest и WebResponse, ага... получили ответ в виде json... "как распарсить json c#" - в яндекс, устанавливаете/скачиваете через Nuget библиотеку newtonsoft.json, и т.д. Чем чаще будете гуглить - тем быстрее "создатите" свой первый велосипед (пока не думайте о производительности или стилистике кода). Только так вы реально поймёте - как работать и с чем "это едят".

    п.с. 2 пункт не обязателен, но важен
    Ответ написан
    6 комментариев