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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    - в визулстудии работает кнопка F1 (очень рекомендую)
    - студия сгенерировала для вас ЗАГОТОВКИ (они вполне осмысленны, что бы вы не забыли их реализовать)
    - а это подразумевает, что правильный код, вы туда впишете сами. в отличии о обычного проперти класса, метод интерфейса не может быть пустым.. и именно по этому, он заполнен кодом, который необходимо изменить
    Ответ написан
    Комментировать
  • Как добавить байты в один массив?

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

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    попробуйте погуглить:
    - c# winforms binding
    (а так же)
    - c# winforms binding ListBox
    - c# winforms binding TextBox
    - c# winforms binding samples
    - c# binding MySql
    - c# binding MySql samples

    ps если после этого будут вопросы еще - приходите, попробуем разобраться
    Ответ написан
  • Как решить проблему с классами?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    а если так?
    https://ideone.com/4MqdOY

    ps обновлено (для общей эрудиции)
    Ответ написан
    1 комментарий
  • Программа почему-то только перечисляет числа, хотя должна находить сумму чисел, которые делятся на указанное число, как исправить?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    код
    using System;
    
    namespace sum_of_dividends
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Введите начальное число");
                var a = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Введите конечное число");
                var b = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Введите кратное число");
                var c = Convert.ToInt32(Console.ReadLine());
    
                var sum = 0;
                for (var x = a; x <= b; x++)
                    if ((x % c) == 0)
                        sum += x;
    
                Console.WriteLine(sum);
            }
        }
    }
    выхлоп
    eY84w6Q.png
    ps чуток перегнул. теперь упростил.. и еще..
    ps по заказу switch
    using System;
    
    namespace sum_of_dividends
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Введите начальное число");
                var a = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Введите конечное число");
                var b = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Введите кратное число");
                var c = Convert.ToInt32(Console.ReadLine());
    
                var sum = 0;
                for (var x = a; x <= b; x++)
                    switch (x % c)
                    {
                        case 0: sum += x; break;
                        default: break;
                    }
    
                Console.WriteLine(sum);
            }
        }
    }
    выхлоп
    blK6WLW.png
    ps тогда уже для полноты картины и while
    using System;
    
    namespace sum_of_dividends
    {
        class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Введите начальное число");
                var a = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Введите конечное число");
                var b = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Введите кратное число");
                var c = Convert.ToInt32(Console.ReadLine());
    
                var sum = 0;
                var x = a;
                while (x <= b)
                {
                    switch (x % c)
                    {
                        case 0: sum += x; break;
                        default: break;
                    }
                    x++;
                }
    
                Console.WriteLine(sum);
            }
        }
    }
    выхлоп
    8OSpPXo.png
    тоже подправлено. так понадежнее
    Ответ написан
  • Можно конвертировать код pascal в C#?

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

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

    ps к примеру https://ideone.com/ поддерживает оба языка, но вряд ли это будет удобно (в один момент времени). можно для шарпа использовать в это же время https://dotnetfiddle.net/
    но что то мне подсказывает, что выбор все равно больше..

    **** - IDE нужны что бы прогонять код и сравнивать результаты (правильный перевод, должен давать совпадающие результаты, при совпадающих входных данных)
    Ответ написан
    1 комментарий
  • Как посчитать среднее время в EFcore из запроса?

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    как интерфейс. а в чем проблемы?
    Ответ написан
  • Исключение это и есть ошибка?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Исключение это и есть ошибка?
    запланированная возможности ошибки (обычно высоко вероятной)
    ps предполагая вероятную ошибку, мы даем инструмент ее обработки.. (я думаю, что изобретатели Exception думали именно так
    pps по опыту кодинга && рефакторинга, думаю, это классный инструмент.. но не для новичков
    Ответ написан
    Комментировать
  • Перегрузка методов - это не более, чем синтаксический сахар?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    это точно не сахар, а чистой воды полиформизм ООП
    ваш вопрос скорее в плоскости стоит ли использовать полиформизм?
    можно нагуглить море инфы к примеру сразу на русском https://habr.com/ru/post/37576/
    ps чем пользуюсь сам, чуть ли не ежедневно
    static void print(this string s, string pfx = "", string sfx = "") => Console.WriteLine(pfx + s + sfx);
    static void print(this IEnumerable<string> sa, string pfx = "", string sfx = "") => sa.ToList().ForEach(s => s.print(pfx, sfx));
    pps ну или упрощенно
    static void print(this string s) => Console.WriteLine(s);
    static void print(this IEnumerable<string> sa) => sa.ToList().ForEach(s => s.print());
    ppps очень удобно
    using System;
    using System.Diagnostics;
    using System.Linq;
    
    namespace ff.links
    {
        static partial class Program
        {
            static void Main(string[] args)
            {
                var sw = new Stopwatch();
                sw.Start();
                "let's begin...".print();
    
                var finds = fromTypical().scan();
                "find targets is ".print(pfx, finds.Count().ToString());
                //finds.print();
                var bro = finds.Where(b => b.Contains(ffBinary));
                "find browsers is ".print(pfx, bro.Count().ToString());
                bro.print(pfx);
                var cfg = finds.Where(b => b.Contains(fflConfig));
                "find configs is ".print(pfx, cfg.Count().ToString());
                cfg.print(pfx);
                var profiles = finds.Where(b => b.Contains(ffProfileSign));
                "find profiles is ".print(pfx, profiles.Count().ToString());
                //profiles.print();
    
                profiles.buildLinks(bro.First());
                //profiles.prefsApplay();
    
                //links2start();
                sw.Stop();
                var ts = sw.Elapsed;
                $"RunTime {ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}".print();
    //#if DEBUG
    //            "press any key to continue...".print();
    //            Console.ReadKey();
    //#endif
            }
            const string pfx = "  ::> ";
        }
    }
    Ответ написан
    6 комментариев
  • Статические методы вызываются быстрее?

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Назовем натуральное число палиндромом, если его запись читается одинаково
    сначала и с конца (например: 4884, 393,1)
    про 393,1 не понятно
    Где ошибка в коде?
    ошибки и в коде, ошибки в ходе мыслей
    1 - зачем ввод заранее известного параметра? (100)
    2 - зачем сравнивать с b мало того что вы его не меняете, вы его еще и всегда обнуляете!!!кажется написано в процессе своих оптимизаций.. сорян
    3 - пример на подумать (еще утоптано)
    using System;
    using System.Linq;
    
    namespace palindrome
    {
        class Program
        {
            static void Main(string[] args)
            {
                int p = 0;
                string q = default, r = default;
                for (int i = 1; i < 100; i++)
                    if ((q = (i * i).ToString()) == (r = new string(q.Reverse().ToArray())))
                        Console.WriteLine($"palindrome {++p} q={q} == r={r}"); ;
                Console.WriteLine($"total: {p}");
            }
        }
    }
    Ответ написан
  • Стоит ли использовать здесь перечисления?

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

    ps со стороны, все это невозможно оценить без детально расписанных сценариев использования
    Ответ написан
    Комментировать
  • Хорошая книга по C# с практикой и на понятном языке?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    сначала мне бы хорошо изучить шарп
    (вроде с этого и начинал, но потерялось, восстанавливаю) это лучшая отправная точка
    и на понятном языке
    это явно главная проблема..
    приведу любимую (на протяжении уже десятков лет) цитату:
    язык, как средство общения, становится коммуникабельным, лишь тогда, когда собеседники опираются на сходный жизненный опыт
    (с) Элан Уотс, "Путь Дзэн"
    и обязательно с ... интерактивом
    ну блин.. интерактив и книги??? это не совместимо..
    интерактив это сайты ... и/или опять игры смыслов? (ваши непонятки?).. ,бывает интерактив в продвинутых IDE, для поддерживаемых языков
    Ответ написан
  • Почему нельзя вызывать методы объекта через свойство делегата Target?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    можно
    using System;
    
    namespace SomeNonStatic
    {
        class Program
        {
            delegate void someDelegate();
            static void Main(string[] args)
            {
                var so = new SomeClass();
                someDelegate sd = so.SomeNonStaticMethod;
    
                Console.WriteLine($"someDelegate.Target == someObject => {sd.Target == so}");
    
                (sd.Target as SomeClass).SomeMethod(); // а вот так почему-то нельзя
            }
        }
    
        internal class SomeClass
        {
            internal void SomeNonStaticMethod() => Console.WriteLine("it's SomeNonStaticMethod");
            internal void SomeMethod() => Console.WriteLine("it's SomeMethod");
        }
    }
    а еще лучше так
    using System;
    
    namespace SomeNonStatic
    {
        class Program
        {
            delegate void someDelegate();
            static void Main(string[] args)
            {
                var so = new SomeClass();
                someDelegate sd = so.SomeNonStaticMethod;
    
                Console.WriteLine($"someDelegate.Target == someObject => {sd.Target == so}");
    
                if(sd.Target.GetType() is SomeClass)
                    (sd.Target as SomeClass).SomeMethod(); // а вот так почему-то нельзя
            }
        }
    
        internal class SomeClass
        {
            internal void SomeNonStaticMethod() => Console.WriteLine("it's SomeNonStaticMethod");
            internal void SomeMethod() => Console.WriteLine("it's SomeMethod");
        }
    }
    Ответ написан
    Комментировать
  • Где допущена ошибка при проверки c Split('-')?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    уточните условия. а то даже приведенный код дает другой выхлоп
    слегка модифицируем
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace parse_xxxx_000
    {
        static class Program
        {
    
            static void Main(string[] args)
            {
                "zit-101".parse().print();
                "101-zit".parse().print();
                "zit101".parse().print();
                "101zit".parse().print();
            }
    
            static void print(this object o) => Console.WriteLine(o.ToString());
    
            static (string, bool) parse(this string s)
            {
                bool valid = true; //полагаем, что индекс является группой
                var parts = s.Split('-'); //разделяем на части по тире
                if (parts.Length == 2) //если получили две части
                {
                    //разбор первой части
                    string p1 = parts[0];
                    if (p1.Length == 3 || (p1.Length == 4 && Char.IsLetter(p1[3]))) //трехсимвольная часть, либо 4-символьная
                    {
                        //должно быть 3 больших буквы
                        for (int i = 0; i < 3; i++)
                        {
                            if (!Char.IsLetter(p1[i]))
                            {
                                valid = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        valid = false;
                    }
                    //если первая часть подходит, проверяем вторую
                    if (valid)
                    {
                        string p2 = parts[1];
                        if (p2.Length == 3) //трехсимвольная часть
                        {
                            //должно быть 3 цифры
                            for (int i = 0; i < 3; i++)
                            {
                                if (!Char.IsDigit(p2[i]))
                                {
                                    valid = false;
                                    break;
                                }
                            }
                            //проверка первой цифыр 1..5
                            if (valid)
                            {
                                int a = int.Parse(p2[0].ToString());
                                if (a < 1 || a > 5)
                                {
                                    valid = false;
                                }
                            }
    
                        }
                    }
                }
                return (s, valid);
            }
        }
    }
    и получим
    octVl3r.png

    .. попробую свернуть.. с конца..
    //проверка первой цифыр 1..5
    if (valid)
            valid = (p2[0] >= '1') && (p2[0] <= '5');
    //должно быть 3 цифры
    valid = p2.All(c => Char.IsDigit(c));
    //если первая часть подходит, проверяем вторую
    //если первая часть подходит, проверяем вторую
                    if (valid)
                    {
                        //трехсимвольная часть
                        //должно быть 3 цифры
                        //проверка первой цифыр 1..5
                        string p2 = parts[1];
                        valid = p2.Length == 3 && p2.All(c => Char.IsDigit(c)) && ((p2[0] >= '1') && (p2[0] <= '5'));
                    }

    .. упростим логику. ту внимательно смотри как
    было
    static (string, bool) parse(this string s)
            {
                bool valid = true; //полагаем, что индекс является группой
                var parts = s.Split('-'); //разделяем на части по тире
                if (parts.Length == 2) //если получили две части
                {
                    //разбор первой части
                    string p1 = parts[0];
                    if (p1.Length == 3 || (p1.Length == 4 && Char.IsLetter(p1[3]))) //трехсимвольная часть, либо 4-символьная
                    {
                        //должно быть 3 больших буквы
                        for (int i = 0; i < 3; i++)
                        {
                            if (!Char.IsLetter(p1[i]))
                            {
                                valid = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        valid = false;
                    }
                    //если первая часть подходит, проверяем вторую
                    if (valid)
                    {
                        //трехсимвольная часть
                        //должно быть 3 цифры
                        //проверка первой цифыр 1..5
                        string p2 = parts[1];
                        valid = p2.Length == 3 && p2.All(c => Char.IsDigit(c)) && ((p2[0] >= '1') && (p2[0] <= '5'));
                    }
                }
                return (s, valid);
            }
    и как лучше (упс, исправлена поспешность )))
    static (string, bool) parse(this string s)
            {
                bool valid = true; //полагаем, что индекс является группой
                var parts = s.Split('-'); //разделяем на части по тире
                if (parts.Length == 2) //если получили две части
                {
                    //разбор первой части
                    string p1 = parts[0];
                    if (p1.Length == 3 || (p1.Length == 4 && Char.IsLetter(p1[3]))) //трехсимвольная часть, либо 4-символьная
                    {
                        //должно быть 3 больших буквы
                        for (int i = 0; i < 3; i++)
                        {
                            if (!Char.IsLetter(p1[i]))
                            {
                                valid = false;
                                break;
                            }
                        }
                    }
                    else
                        valid = false;
                    //если первая часть подходит, проверяем вторую
                    valid &=
                        //должно быть 3 цифры
                        parts[1].Length == 3 &&
                        parts[1].All(c => Char.IsDigit(c)) &&
                        //проверка первой цифыр 1..5
                        ((parts[1][0] >= '1') && (parts[1][0] <= '5'));
                }
                return (s, valid);
            }
    ...применяем туже логику и
    static (string, bool) parse(this string s)
            {
                bool valid = true; //полагаем, что индекс является группой
                var parts = s.Split('-'); //разделяем на части по тире
                if (parts.Length == 2) //если получили две части
                {
                    //разбор первой части
                    valid &=
                        //должно быть 3 больших буквы .. на самом деле ты и не проверял большие
                        //трехсимвольная часть, либо 4-символьная
                        (parts[0].Length == 3 || parts[0].Length == 4) &&
                        parts[0].All(c => Char.IsLetter(c));
                    //если первая часть подходит, проверяем вторую
                    valid &=
                        //должно быть 3 цифры
                        parts[1].Length == 3 &&
                        parts[1].All(c => Char.IsDigit(c)) &&
                        //проверка первой цифыр 1..5
                        ((parts[1][0] >= '1') && (parts[1][0] <= '5'));
                }
                return (s, valid);
            }
    ...и еще разок
    static (string, bool) parse(this string s)
            {
                bool valid = true; //полагаем, что индекс является группой
                var parts = s.Split('-'); //разделяем на части по тире
                if (parts.Length == 2) //если получили две части
                {
                    valid &=
                        //разбор первой части
                        //должно быть 3 больших буквы .. на самом деле ты и не проверял большие
                        //трехсимвольная часть, либо 4-символьная
                        (parts[0].Length == 3 || parts[0].Length == 4) &&
                        parts[0].All(c => Char.IsLetter(c)) &&
                        //если первая часть подходит, проверяем вторую
                        //должно быть 3 цифры
                        parts[1].Length == 3 &&
                        parts[1].All(c => Char.IsDigit(c)) &&
                        //проверка первой цифыр 1..5
                        ((parts[1][0] >= '1') && (parts[1][0] <= '5'));
                }
                return (s, valid);
            }

    ну вот где то теперь, можно заметить, что не стоит сразу предполагать успех..
    продолжить?
    убираем предположения
    static (string, bool) parse(this string s)
            {
                var parts = s.Split('-'); //разделяем на части по тире
                return (s,
                    //если получили две части
                    parts.Length == 2 &&
                    //разбор первой части
                    //должно быть 3 больших буквы .. на самом деле ты и не проверял большие
                    //трехсимвольная часть, либо 4-символьная
                    (parts[0].Length == 3 || parts[0].Length == 4) &&
                    parts[0].All(c => Char.IsLetter(c)) &&
                    //если первая часть подходит, проверяем вторую
                    //должно быть 3 цифры
                    parts[1].Length == 3 &&
                    parts[1].All(c => Char.IsDigit(c)) &&
                    //проверка первой цифыр 1..5
                    ((parts[1][0] >= '1') && (parts[1][0] <= '5')));
            }
    и сразу поменялся результат
    VcOviP6.png


    все. тут уже должно быть понятно

    забавно, но мы умудрились исчерпать размер ответа. но можно и так https://dotnetfiddle.net/Bdge92
    а без каментов и пустых строк выглядит компактно 7ugOOhy.png
    Ответ написан
    Комментировать
  • Как обновить datatable?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    https://docs.microsoft.com/en-us/dotnet/api/system...

    в отличии от примера, вам не надо создавать новую строку. просто меняете значения полей
    .. или всей строки
    Ответ написан
    Комментировать
  • Как сделать что бы текст в label который находится в tabControl, можно было пролистывать только вниз, а по горизонтали нельзя?

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

    ps
    текст в label
    а у label скролов вообще не бывает
    Ответ написан