Ответы пользователя по тегу C#
  • C# vs Php. Что выбрать?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вы вроде уже расписались в любви к шарпу... (сам буквально вчера поднял Unity и теперь смотрю, с какого боку его грызть начать ;))

    что держит? думы о трудоустройстве? чем дальше от мегаполисов, тем больше шансов быстрее подзаработать на "пыхе", и сложнее найти приличную работу на шарпе. но в столицах, думаю хорошие шансы и шарпистом устроится + шансы, что трудоустройство будет допускать хорошие, даже лучшие чем у пыха, перспективы роста (корпоративный сектор же ;) .. (другой вопрос - иметь шансы и реализовать их - не одно и тоже, это всегда зависит от человека ;))
    Ответ написан
    1 комментарий
  • Лучшие практики. Как закрыть главную форму из дочерней?

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

    2 - конкретно в WinForms можно отрабатывать вообще разные формы последовательно

    using System;
    using System.Windows.Forms;
    
    namespace X
    {
        internal static partial class Y
        {
            /// <summary>
            /// Главная точка входа для приложения.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(A = new fmA());
                // bla-bla-bla with login
                Application.Run(B = new fmB());
            }
            internal static fmA A;
            internal static fmB B;
        }
    }


    3 - для WPF не подскажу, но наверняка оба подхода можно рассмотреть и пробовать искать аналогии

    ps для WinForms
    Как закрыть главную форму из дочерней?
    буквальный ответ - ни как, закрытие главной формы, это завершение Application.Run(A = new fmXXX()); и если вы не модифицирутете код Main- тогда это завершение программы
    Ответ написан
    2 комментария
  • C# - Как сделать выборку из текста?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    https://www.newtonsoft.com/json

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

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

    ps можно еще ленивый вариант - Split по
    {"userId":"
    тогда первый элемент отбрасываем, все остальные начинаются с искомой величины, надо только хвост
    "} bla-bla-bla
    отрубить

    ps держите прототип, содержит все 3 упомянутые подхода, но перфоманс можно сравнить только на реально больших данных )).. (но на больших данных могут и баги полезть ;)

    spoiler

    вопрос понравился, и выдалось время.. хотя и не за 15 минут, врать не буду, часа полтора порядка 45 минут ушло на заковырки )) в основном с json (мало опыта)

    upd и уже исправлено - была заготовка класса для частичной json выборки, но она не нужна

    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace parsejson111
    {
        class Program
        {
            const string data = "{\"anchor\":\"aaabbbccc==\",\"members\":[{\"userId\":\"111\"},{\"userId\":\"2222\"},{\"userId\":\"333\"},{\"userId\":\"444\"}],\"has_more\":true}";
            // фишки замера заложены, но разница может проявиться только на больших объемах ))
    
            static void Main(string[] args)
            {
                Console.WriteLine("data:");
                Console.WriteLine(data);
    
                var sw = new Stopwatch();
                sw.Start();
                var ts = sw.Elapsed; // лень объявлять тип
    
                json();
                hand();
                lazy();
    
                sw.Stop();
                Console.WriteLine("press any key to continue...");
                Console.ReadKey();
    
                void json() // возможно существует более элегантный вариант. тут у меня опыта мало ))
                {
                    sw.Reset();
                    Console.WriteLine("... json");
                    var j = JObject.Parse(data);
                    var r = j["members"].Children().ToList();
                    foreach (var u in r)
                    {
                        var uid = JObject.Parse(u.ToString());
                        var id = uid["userId"].Value<string>();
                        Console.WriteLine(id);
                    }
                    ts = sw.Elapsed;
                    Console.WriteLine($"\t{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}");
                }
    
                void hand() // зато тут гарантирую - оптимизировать лучше не реально, и по перфомансу вряд ли можно лучше ))
                {
                    sw.Reset();
                    Console.WriteLine("... hand");
                    var p = 0;
                    while ((p = data.IndexOf("{\"userId\":\"", p)) > 0)
                    {
                        p += 11; //длина шаблона. заодно избегаем риска зацикливания
                        var f = data.IndexOf("\"}", p);
                        Console.WriteLine(data.Substring(p, f - p));
                    }
                    ts = sw.Elapsed;
                    Console.WriteLine($"\t{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}");
                }
    
                void lazy()
                {
                    sw.Reset();
                    Console.WriteLine("... lazy");
                    var t = data.Split(new string[] { "{\"userId\":\"" }, StringSplitOptions.RemoveEmptyEntries);
                    for (var i = 1; i < t.Length; i++) // здесь и везде - обработка пустого множества на вашей совести
                    {
                        var id = t[i].Split(new string[] { "\"}" }, StringSplitOptions.RemoveEmptyEntries);
                        Console.WriteLine(id[0]);
                    }
                    ts = sw.Elapsed;
                    Console.WriteLine($"\t{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}");
                }
            }
        }
    }

    Ответ написан
    Комментировать
  • Верно ли я обращаюсь к файлу по адресу?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    на скрине один "ONU-Manager" через дефис, другой через пробел
    кроме то, используйте синтаксис, который позволит вам скопировать путь из проводника
    StreamReader fr = new StreamReader(@"D:\C# Projects\ONU-Manager\ONU Manager\bin\Debug\check.txt");

    ps используйте как пример к размышлению

    using System;
    using System.IO;
    
    namespace mypath
    {
        class Program
        {
            static void Main(string[] args)
            {
                var p = Environment.CurrentDirectory;
                Console.WriteLine(p);
                Console.ReadKey();
                p += @"\..\..\App.config";
                var appcfg = File.ReadLines(p);
                foreach(var l in appcfg)
                    Console.WriteLine(l);
                Console.ReadKey();
            }
        }
    }
    Ответ написан
    2 комментария
  • Какую переменную лучше взять для счетчика кликера?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    сравнивайте
    ulong
    decimal
    BigInteger

    последний несоизмеримо больше, но все равно конечный. тут было Предел big integer?

    но надо понимать, что это
    big integer хранит uint[] разрядов
    uint[] в котором разрядом является uint

    ps что из этого доступно в Unity - не подскажу
    decimal должен быть, ну и вроде BigInteger в Mono реализован, значить все должно быть доступно
    Ответ написан
    Комментировать
  • Остановить проверку if на время?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    из вопроса пока не понятно что вы хотите? но для начала:
    -
    после того, как условие int1 > 20 выполнится, остальные проверяться, конечно не будут,
    во первых будут, да задача "поспит", но (upd) потом значения проверяться все равно будут
    - если вы хотите манипулировать прохождением цикла, используйте операторы
    continue
    и/или
    breack

    пример
    while (true)
    {
        if (int1 > 20)
            {
                //код
                System.Threading.Thread.Sleep(200000);
                continue;
            }   
            // ...
    }

    вот в этом случае, остальные проверки не будут выполнятся, и цикл уйдет на следующий виток

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

    но не зная конечной цели, дать более внятный совет невозможно
    Ответ написан
  • Что нужно знать чтобы перевести с big-endian в little-endian?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    тут невооруженным глазом видно - группы по 4 байта реверсируются
    upd! кроме последней... опечатки нет? полагаю есть.. калькулятор по ссылке коллеги коллеги подтверждает ))

    для эрудиции
    Ответ написан
    1 комментарий
  • Как облегчить написание простого ПО на С# с интеграцией AD?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    на что обратить внимание после Visual Studio, мануалов по C# и Аллена Джонса?
    на гугл (а еще на кнопку F1 в студии, на любом слове)
    пример C# AD
    следующий c# wmi
    .. дальше справитесь?

    ps вот еще сайтик где сильный раздел по шарпу/дотнету https://metanit.com/
    pps
    рисование простейших элементов GUI Windows
    начните с winforms, рисовать ни чего не надо, все в студии
    Ответ написан
    Комментировать
  • На сколько сильно программирование .ASP NET MVC зависит от C#?

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

    - язык один C# (хотя можно использовать любые языки реализованные в .NET, но все остальное, кроме vb.Net будет уже муками творчества)

    - ASP.NET MVC это шаблон проектирования и набор библиотек для его реализации

    - ASP.NET MVC Core тоже самое, только кросс платформенное, тут скоре надо просто понять разницу между ветками .Net
    Ответ написан
    Комментировать
  • Если ли готовое решение перевода с big endian в little endian?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Я на js, php пишу

    гугл подсказывает big endian в little endian javascript convert

    первая (но не единственная) выдача https://stackoverflow.com/questions/5320439/how-do...
    Ответ написан
    Комментировать
  • Как в c# сделать так, чтобы ввод с клавиатуры запоминался в одну строчку?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    нет прямых аналогов, строку придется парсить
    к примеру Split через пробел (ну или ожидаемый набор возможных разделителей), и парсинг ожидаемых типов значений, типа Int32.TryParse (метод реализован для всех основных числовых типов)
    Ответ написан
    Комментировать
  • Как обмениваться данными с сервером, на приложении xamarin?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Гуглю дальше узнаю про Rest api и RestSharp, но так и не понимаю как, что, зачем, куда...
    Как обработать данные на сервере? Это php или js скрипты?
    это только усложнения*.
    гуглите xamarin Mysql, при необходимости, пользуйтесь переводчиками страниц

    ps * - возможно когда то эти технологии вам потребуются. но сейчас ищите простое решение. что то типа коннектора, который совместим с ксмарином..

    еще возможная подсказка - если не ошибаюсь, ксамарин все еще основан на Mono а если так, запрос типа mono vs Mysql может оказаться еще более результативным
    Ответ написан
    Комментировать
  • Поможете с шарпом?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ну или так
    result2 = 1.0 / 4.0 - (1.0 / 4.0 * Math.Sin((5.0 / 2.0 * PI) - (8.0 * b)));
    Ответ написан
    Комментировать
  • Как проверить значения переменных в конструкторе?

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

    а в чем трудности?
    вы не привели полный синтаксис класса. но в общем случае достаточно
    int topA = 95;
    int topB = 1;
    int topC = 89;
    после создания класса, проверять ни чего не надо. а вот после манипуляций - да, возможно надо. но это уже уровень вашей ответственности, при написании логики (реализуйте свою цель, вот и все)
    Ответ написан
    2 комментария
  • C#, Ошибка System.NullReferenceException при работе с базой данных MySql. Как исправить?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 -
    NullReferenceException
    и так сообщает суть ошибки

    2 - уберите вот все это
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar!=' ')
                    return;
                else
                    e.Handled = true;
            }
    
            private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar != ' ')
                    return;
                else
                    e.Handled = true;
            }
    
            private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar != ' ')
                    return;
                else
                    e.Handled = true;
            }
    кто вас надоумил вмешиваться в обработку этих событий? я не к тому что нельзя, просто надо хорошо понимать зачем? *

    3 - try/catch у вас опять мешанина мыслей. именно catch должен обрабатывать ситуацию ошибок. но использовать try/catch для разделения логики - просто безумие.

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

    upd * - если вы так пробелы фильтруете, гуглите валидацию, понадежнее будет
    Ответ написан
    2 комментария
  • Заменить последний символ строки на большой в C#, как?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    На коленке
    не работает.. при чем много по чему..
    к примеру вот че работает (с каментами):
    using System;
    using System.IO;
    using System.Linq;
    
    namespace lastChar
    {
        class Program
        {
            static void Main(string[] args)
            {
                var lines = File.ReadAllLines(@"C:\Windows\System32\drivers\etc\hosts"); // для примера
                for (var i=0; i < lines.Count(); i++) // в итераторе foreach элементы readonly.. типа функциональный стиль
                {
                    if (!string.IsNullOrWhiteSpace(lines[i])) // а то на пустых строках эксепшен будем ловить
                    {
                        // строка, блин, штука то то же не изменяемая.. вот засада
                        var ch = lines[i].ToCharArray();
                        var idx = ch.Length - 1;
                        ch[idx] = Char.ToUpper(ch[idx]);
                        lines[i] = new string(ch);
                    }
                    Console.WriteLine(lines[i]);
                }
                Console.ReadKey();
                //сохраняйте как хотите
                //... и да - точки (решетки) в апкейсе остаются точками. только буквы можно апкейсить
            }
        }
    }


    опять же пример грубый, явно далекий от совершенства.. но работает
    upd - спасибо Meloman19 за подсказку в каментах. теперь практически идеально
    Ответ написан
    1 комментарий
  • Math.Abs от строки как это работает?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    в этом синтаксисе, строка перебирается как массив символов, [] интерпретируется как индекс такого массива
    Ответ написан
    Комментировать
  • События скрола в c#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - скоролятся обычно контенты контейнеров а не форм. убедитесь что вы вешаете обработчик действительно на тот контейнер, в котором что то скролите
    2 - используйте точки прерывания, что бы убедиться, что вы вообще попадаете в данный обработчик
    3 - когда то давно, я бы, возможно, начал с размещения строки типа label1.Text = "bingo!"; самой первой в обработчике, и лишь потом бы усложнял логику
    Ответ написан
    Комментировать
  • Как реализовать стек на C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а что? гугл уже тоже заблокировали? стек на C#

    ps вспомнил, был тут вопрос об оптимизации стека, где то в январе 2017, чел там на классах все расписал, но в приоритете была именно скорость )).. но еще и было требование функций модифкации стека.. оказалось у меня сохранился проект. вот код (System.Diagnostics необходим для замеров времени исполнения)

    using System;
    using System.Diagnostics;
    
    namespace stack
    {
        public class Program
        {
            static private int max = 100_000_000;
    
            class Stack
            {
                private int[] sd = new int[max];
                private int sp = -1;
    
                public void Push(int data)        => sd[++sp] = data; 
                public int  Pop()                 => sd[sp--];
    
                public void Rep(int sp, int data) => sd[sp] = data; 
                public void Inc(int sp, int data) => sd[sp] += data; 
                public void Dec(int sp, int data) => sd[sp] -= data; 
                public void Xor(int sp, int data) => sd[sp] %= data; 
            }
    
            public static void StackTest()
            {
                var watch = new Stopwatch();
                var stack = new Stack();
    
                var count = max;
    
                watch.Start();
                for (int i = 0; i < count; i++)
                    stack.Push(i);
                watch.Stop();
                Console.WriteLine(watch.Elapsed);
    
                watch.Restart();
                for (int i = 0; i < count; i++)
                    stack.Xor(i, 2);
                watch.Stop();
                Console.WriteLine(watch.Elapsed);
    
                watch.Restart();
                for (int i = 0; i < count; i++)
                    stack.Pop();
                watch.Stop();
                Console.WriteLine(watch.Elapsed);
    
                Console.ReadKey();
            }
    
            public static void Main() => StackTest();
        }
    }


    ! данный прототип действительно не содержит ни каких обработчиков возможного переполнения ;))
    ну и кусок кода https://i.imgur.com/AejLUcX.png для классического стека, скорее всего совсем не нужен ))

    всяческие bool empty() ... это bool empty() => sp < 0; .. ну в смысле для данного прототипа ))
    Ответ написан
    Комментировать
  • Как работает Redis при одновременном доступе нескольких клиентов?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    если проект еще в стадии разаработки, может взглянете на aerospike? есть коммунити (бесплатная) редакция

    ps картинка для привлечения внимания

    ps есть еще ArangoDB, тоже по дефолту оптимизированная на in-memory, многопоточная, и плюшек вообще вагон
    Ответ написан
    7 комментариев