Ответы пользователя по тегу C#
  • Как подключится к Telnet из C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Когда тестю на HK Server все нормально, когда начинаю тестить на WinCE, то в ответ получаю сообщение "???" и смайлик. В чем подвох?
    в кодировке ответа
    Ответ написан
    9 комментариев
  • [C#] Если есть строка с ключевым словом, как вывести всю строку?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    может тебе дать еще ключ? .. от квартиры.. где деньги лежат..
    (с)

    решайте задачу поэтапно. разбивайте на простые вопросы:
    - как найти один ключ в одной строке?
    - что вы получаете после ReadAllLines?
    - как выполнить поиск одного ключа?
    - как вы узнаете что данная строка содержит ключ?
    - возможен ли доступ ко всей этой строке?
    - как расширить решение на несколько ключей?
    - как добавить строку в TextBox

    а то готовое решение вам могут просто не дать. а если и дадут, вам будет не просто его
    переварить
    консольный макет https://www.sendspace.com/file/vyfi3l
    если разберетесь что и как работает, в TextBox уже сами. пусть будет домашнее задание
    Ответ написан
    Комментировать
  • Почему при добавление объекта класса в list один объект перенимает значение другого?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    в методе public Picture Filtration(Picture picture) вы принимаете экземпляр картинки по ссылке (ибо это экземпляр класса, не какой то там int)

    обрабатываете его, и его же и возвращаете. вот и весь ответ

    что бы реализовать задумку, как вы ее описываете, вам нужно клонировать исходное изображение (создать новый экземпляр того же класса, с таким же содержимым). и только после этого применить обработку, и вернуть клон а не оригинал. это можно сделать в том же методе Filtration. логично создать клон в самом начале метода

    ps подробнее тут https://docs.microsoft.com/ru-ru/dotnet/csharp/pro...
    Ответ написан
  • Как сделать, чтобы ProgressBar работал во время нагрузки на приложение?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    можно. только надо вынести обработку данный в отдельный от UI поток, а то блокировка получается

    гуглите и обрящете прогресбар wpf
    Ответ написан
    7 комментариев
  • Изучил C#, написал пару своих проектов. Стоит ли переходить на С++?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    считаю уровень сложности и комфорта разработки - просто не сопоставимые

    пример из жизни
    имел опыт перевода (платный заказ, успешно выполнен) утилиты работы с OpenCV (склейка панорамы) с плюсов на шарп. много матерился )) код был писан не одним автором, не менее 2х, аможет и более. наследовали. вероятно хозяева недоплачивали кодерам, и каждый следующий наследник, как мне показалось, был послабее

    сам на плюсах не пишу, при необходимости читаю, а с помощью лома и какой то матери дебагера VS и МСДН, даже понимаю. пришлось изрядно покоцать лишнее в плюсовом проекте, прежде чем стало понятно происходящее, и стал возможен перевод

    для примера коварных нюансов - в плюсовом проекте, огромные массивы обрезок картинок, так и передавались по значению (полагаю это какой то сишно/плюсовый дефолт? пусть спецы поправят). но там использовалась рукопашная многопоточность (реально довольно таки доморощенные запросы сколько ядер, разбивка массивов, и запуск количества потоков по одному на ядро)

    в шарпе выстроил своего рода конвеерную обработку. ну и по дефолту, там подобные параметры передаются по ссылке

    так вот при объемах входных данных ~50 Мб (типа тестовые выборки) плюсовые проект конечно обгонял. на ~150 Мб (типа тестовые выборки на перфоманс) мы выравнивались. на ~500+ Мб (рабочие примеры покадровой съемки) однопоточный шарп уже уходил в 1,5-2х кратный обгон, на скромно 4х ядерном i3 3330 (за PLINQ заказчик доплачивать не захотел, там и так был все жмотно)

    ps особо отмечу - итоговые склейки, на одном и тоже входном наборе, были бинарно идентичны, как для исходного плюсового проекта, так и для покоцаного для ясности, так и для итогового проекта на шарпе ;)

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - https://www.newtonsoft.com/json
    2 - 5d579514bbbe9303121482.jpeg
    без внешнего сервиса тот же
    результат
    public class Rootobject
        {
            public Friendslist friendslist { get; set; }
        }
    
        public class Friendslist
        {
            public Friend[] friends { get; set; }
        }
    
        public class Friend
        {
            public string steamid { get; set; }
            public string relationship { get; set; }
            public int friend_since { get; set; }
        }


    ps ну или почти тот же List<Friend> или List<Friend>Friend[] будут сериализоваться/десериализоваться одинаково. что выбрать в итоге, зависит исключительно от вашего удобства и стиля кодирования
    Ответ написан
    2 комментария
  • Как получить поток данных через http?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Есть сервис который по http отдает данные. Считываю данные таким образом:

    WebClient client = new WebClient();
    string s = client.DownloadString("213.125.32.5:83/axis-cgi/operator/param.cgi?action...");

    В результате в s получаю Brand.ProdShortName=AXIS P3367.

    уточним, на момент ответа, в данном фрагменте кода, запрос именно такой
    http://213.125.32.5:83/axis-cgi/operator/param.cgi?action=list&group=Brand.ProdShortName

    так вот, в браузере это выглядит так же как и у вас
    3yytnzc.png
    запрос
    http://213.125.32.5:83/axis-cgi/motion/motiondata.cgi?group=0
    у меня в браузере выглядит несколько иначе (но может и тоже практически так же.. у вас какое то логгирование? у меня просто отображение страницы в FF)
    UiZBSYy.png

    как итог, думаю шарповские функции работают вполне корректно. просто вам надо быть внимательнее с запросами

    ps если речь о том что данные по второму запросу постоянно обновляются, копните в сторону потоков - https://docs.microsoft.com/ru-ru/dotnet/api/system...

    pps
    набросок ))
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    
    namespace WebStream
    {
        static class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("let's begin..\n");
                var myWebClient = new WebClient();
                var myStream = myWebClient.OpenRead("http://213.125.32.5:83/axis-cgi/motion/motiondata.cgi?group=0");
                var sr = new StreamReader(myStream);
                while (!sr.EndOfStream)
                {
                    var line = sr.ReadLine();
                    // возможно эту проверку можно и убрать, это как вам удобнее
                    if (!string.IsNullOrEmpty(line))
                        Console.WriteLine(line);
                }
                myStream.Close();
            }
        }
    }
    .. естественно совершенству нет предела. тут не учтена ни какая возможность выхода вообще. не рассмотрены варианты async (а они есть в природе). но как proof of concept пойдет )). уже гораздо лучше чем ничего ))

    удачи!
    Ответ написан
    6 комментариев
  • Как мне с IDataReader привести к int?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    edward_freedom попытался вас переслать с примеру с МСДН (без ссылок правда, как оказалось и без собственного опыта)

    вот ссылка на исходный пример
    https://docs.microsoft.com/ru-ru/dotnet/api/system...

    вы используете агрегирующую функцию (и не знаю на сколько правильно)
    я почикал немного пример из МСДН и проставил пару акцентов
    using System;
    using System.Data.SqlClient;
    
    class Program
    {
        static void Main()
        {
            string str =
                @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;Integrated Security=SSPI";
            ReadOrderData(str);
        }
    
        private static void ReadOrderData(string connectionString)
        {
            string queryString = "SELECT SUM(Freight) FROM dbo.Orders;";
    
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
    
                SqlDataReader reader = command.ExecuteReader();
    
                // !1 ридер все таки должен выполнить считывание, даже если это одна строка
                reader.Read();
                // !2 запоршенное поле Freight имеет тип money, ближайший аналог decimal
                // и мы имеем дело со строками БД, в которых подразумеваются колонки, доже если это одна колонка
                var s = (decimal)reader[0];
    
                Console.WriteLine(s);
                reader.Close();
            }
        }
    }


    ps сорцы баз, часто используемых в примерах МСДН https://github.com/microsoft/sql-server-samples

    pps по мне так Entity Framework комфортнее ))

    ppps коллега eRKa тоже скуп на пояснения. но прав ))
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    версия 2
    using System;
    using System.Data.SqlClient;
    
    class Program
    {
        static void Main()
        {
            string str =
                @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Northwind;Integrated Security=SSPI";
            ReadOrderData(str);
        }
    
        private static void ReadOrderData(string connectionString)
        {
            string queryString = "SELECT SUM(Freight) FROM dbo.Orders;";
    
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
    
                var s = (decimal)command.ExecuteScalar();
                Console.WriteLine(s);
            }
        }
    }


    pppps
    не смотря на раздраженность edward_freedom, код то рабочий

    3sPM7gL.png
    вот ссылка на сорцы https://www.sendspace.com/file/zbqr9q
    Ответ написан
    Комментировать
  • Что вообще может C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    многие из ответивших, сузили реальность до корпоративного веба и виндового десктопа. но это не верно, есть ряд фактов, которые не так широко известны даже среди программистов:
    - нус, начнем с веба - спрос на .Net Core бакендеров, на hh.ru стремительно растет .. к чему бы это? все озаботились созданием корпоративных сайтов? ;))
    - следующий .Net 5, будет кросплатформенным абсолютно (.Net Core лишь переходный этап)
    - на шарпе даже микроконтроллеры программируют это не значит, что код на си или асме хуже, на шарпе код писать быстрее, а отлаживать легче. чаще всего это не только прихоть программиста, но и коммерческий расчет - продукт можно выпустить быстрее
    - благодаря таким технологиям как WASM, BLAZOR и фреймворк Avalonia, не за горами времена, когда можно будет писать код на C# и интерфейс на XAML, и все это будет работать в браузере (в ролике, фрагмент с 24й минуты, если интересно как это вообще возможно - можно и с начала смотреть ))
    - ну и о производительности, в том же Unity, используют прикольные штуки, типа IL2CPP, благодаря которым, Unity имеет достойную производительность, предоставляя комфорт разработки на C#. это не значит, что IL2CPP не могут использовать простые смертные, но это к сожалению, требует квалификации на много выше среднего )). но можно заметить, что даже штатный NGen используют далеко не все программисты. и даже не все о нем знают ))

    ps да, я шарпист, но за плечами около десятка языков
    (хотя в основном старых..
    но были времена, когда, в TD, я по коду узнавал компиляторы "в лицо" ;)) ... (не не.. не все конечно, но Borland Pascal, Borland C/C++, MS C/C++, Clipper, FoxPro.. ну может что то еще из хитов тех времен - точно )).. борландовские компилеры просто с пол пинка (секунды на опознание.. если кто не понял - визуально по дизасму TD )))


    всем успешного программирования! ))
    Ответ написан
    2 комментария
  • Что лучше использовать в реальных проектах Свойства или Protected переменные и методы к ним?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    мода на геттер/сеттер просто так, вроде как отходит.

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

    вопрос защищенности поля, совершенно самостоятельный. надо отдельно изучать когда и зачем скрывать поля от других классов (private) или сборок (protectet)

    стоит учесть что к сокрытию кода это вообще не имеет отношения. зато более чем важно для создания потокобезопасных классов/методов
    Ответ написан
    Комментировать
  • Как записать отличия между двумя текстовыми файлами в 3й файл?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    добавленные строки (в файл после изменения) записываются в 3й файл и помечаются знаком +,
    соответственно удаленные - знаком -,
    измененные знаком *
    сформулируйте четкие критерии измененной строки. допустим, после ряда совпадающих строк, обнаруживаться такие (в исходном и измененном файле соответственно):
    - b00a4ccdf4a46a8d9e69da27d52e92f8cd04d0d637f38b763f873c45b9a05bcf
    - 0afd10788608c552b0f25c5d644977e66d1185be45fee7dff716052e273115a3
    жирным шрифтом выделен 0, как вероятный повод считать что эти строки имеют сходство.. так ли на самом деле? как понять что строка действительно изменена, а не новая?

    совет

    using (StreamReader srS = new StreamReader(pathS))
                {
                    string lineS;
                    while ((lineS = srS.ReadLine()) != null)
                    {
                        SourceList.Add(lineS);
                        Console.WriteLine(lineS);
                    }
                }
    
                using (StreamReader srCh = new StreamReader(pathCh))
                {
                    string lineCh;
                    while ((lineCh = srCh.ReadLine()) != null)
                    {
                        ChangeList.Add(lineCh);
                        Console.WriteLine(lineCh);
                    }
                }


    1 - тяжеловесно и старомодно. и можно было бы вынести повторяющияся код в отдельный метод, но.. все уже сделано за нас.. и для нас..
    2 - стильно, молодежно (с) примерно так
    SourceList = File.ReadAllLines(pathS).ToList();
    ChangeList = File.ReadAllLines(pathCh).ToList();

    Ответ написан
    Комментировать
  • Какую БД и механизмы использовать для работы с разных устройств?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    в приоритете Postgresql
    хороший вариант для бекенда (СУБД на удаленном сервере. а значит, для безопасности как минимум, еще и покрытая слоем API)

    если хотите локальную, такую же кросcплатформенную СУБД как и само приложение, скорее всего это SQLite
    Ответ написан
    6 комментариев
  • Какие можно сделать Пет-Проджекты?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    3 - СУБД
    2 - стоит. и можно )) upd если учебный пример на корке 2.* почему не погрызть его?
    Ответ написан
    3 комментария
  • Нужно ли создавать объекты модели (Entity Framework) из базы данных при старте приложения?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вся логика приложения должна работать с запросами к БД
    все что до и после, это воображение. практикуйтесь, и все станет понятнее
    Ответ написан
    6 комментариев
  • Как использовать IEnumerable с примитывными типами в Entety framework?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    раз уж добрались до EF, то пройдите учебные руководства, там все просто шеколадно в плане комфорта разработки. в плане производительности всегда найдется кто то лучше, но это будет не тривиально. и точно не требуется ни каких многослойных сериализаций

    https://docs.microsoft.com/ru-ru/ef/core/
    https://habr.com/ru/post/324272/
    https://docs.microsoft.com/ru-ru/ef/core/get-start...
    https://metanit.com/sharp/entityframeworkcore/

    ps личные воспоминания о litedb - не припомню проблем с производительностью. помню жестокую подлянку с типами - сохраняем int[,], а восстанавливает int[]. что не соответствует декларированной объектно ориентированности
    Ответ написан
    7 комментариев
  • Как перейти на папку выше?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    чуток по современнее будет так

    using System;
    using System.IO;
    
    namespace perentDir
    {
        class Program
        {
            static void Main(string[] args)
            {
                var x = Directory.GetCurrentDirectory();
                var y = Directory.GetParent(x);
                Console.WriteLine(x);
                Console.WriteLine(y);
            }
        }
    }
    Ответ написан
    Комментировать
  • C# (winform) как засунуть async и await в мой код?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - совет - не дергайте сборщик мусора по мелочам. этим вы гарантированно ухудшаете время выполнения. в то же время он и сам великолепно справится, пока вы будете рассматривать результат

    2 - осваивайте binding к внешним объектам. Windows Forms DataGridView это умеет https://docs.microsoft.com/ru-ru/dotnet/framework/...

    в простейшем случае можете потренироваться на кошечках попробовать массивы/списки (а можно и Entity Framework подтянуть, там есть вариант БД "in memory". но только если есть данные загружаемые из внешних БД, или сохраняемые в БД.. хотя EF уже весь на async/await "из коробки")

    3 - binding из бавит вас от рукопашного создания/удаления строк DataGridView. это тяжеловестные операции, учитывая что речь о визуальных эелементах

    краткое резюме - binding к массивам/спискам/бд, а их обработка во внешних процессах, или PLINQ.. или async/await - что осилите
    Ответ написан
    Комментировать
  • Действительно ли С# скоро устареет?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Разумна ли мысль
    нет. контр мнение читайте тут https://habr.com/ru/company/epam_systems/blog/429766/
    .. и тут https://habr.com/ru/post/426961/

    и это еще полдела, с развитием технологий типа WASM, именно js будет главным на вытеснение из лидеров. очень долгое, но неизбежное, в силу гораздо больших фундаментальных недостатков, допущенных при создании языка. если вы не в курсе, js на 5 лет старше c#.. и был создан, по сути "на коленке" что называется

    Microsoft сдает позиции
    и снова неувязочка с реальностью https://habr.com/ru/post/449590/
    Ответ написан
    Комментировать
  • Get запрос. Как дать отработать всем скриптам?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    начинался камент.. потом думай а чеб не ответить то? повтор:

    IE удобен тем, что подхватывает всё, что стоит в IE под пользователем - аутентификацию, куки, например
    у IE как приложение - свой профиль. у встраиваемого компонента - другой профиль. и они точно не пересекаются. upd но так точно было раньше.. на сколько давно?.. не думаю что важно.. но я всего года 3-4 как не ботил встроенным ИЕ ))

    еще один существенный недостаток движка IE - все больше сайтов перестают его полноценно поддерживать

    но как стартовый вариант для вхождения в увлекательный мир ботизации - ессно самый доступный ))

    ps но ботам как правило нужны уникальные профили. у IE с этим монолит - упомянутые выше - один для IE самого по себе, и еще один абсолютно на все интеграшки

    как для ботизации (тут надо понимать что это не обязательно что то порицаемое или не верное - бот как такой, это автоматизация рутинных действий с сайтом. а если создатели сайта дают интересную (и бесплатную) инфу, но не научились пилить АПИ - бот может быть объективно полезной кому то необходимостью.. хотя все топ популярные инструменты, как правило это инструменты тестирования интерфейса ))) (upd самый топ - Selenium)

    краткие наброски:
    - все таки CEF#
    - если надо на сервере - умеет работать "без головы" (без гуи)
    - есть даже форк "безголовый", сохранял ссылку, но не помню где
    - если надо движок фокса - GeckoFx. проект интересный, но очевидно белее вялый
    - и снова о серверах - есть и другие "безголовые движки", даже на ноде (читай хромиум, читай казалось бы братья CEFу (да да # это только обертка над оригинальным проектом "встраиваемый хромиум")).. но как то выходит что CEF-клоны универсальнее, надежнее и быстрее обновляются
    Ответ написан
    Комментировать