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

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    visual studio code или более старые версии visual studio

    ps но разве что для начального изучения языка, или если найти работу, гду большой парк старых машин и старых систем, ни кто не спешит обновлятся, но есть корпоративные наработки на шарпе.
    разрабатывать на продажу точно лучше уже на 10.
    Ответ написан
    Комментировать
  • Как сделать Distinct для List?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    уточните вопрос - выхотите получить выборку по конкретному id?
    если да, то надо не Distinct() использовать, а Where(d => (d.id == targetId))

    если вы примените Distinct(), то даже при наличии повторяющихся id, но с различными данными, то вы получите ровно всю исходную коллекцию

    ну и как возможный вариант для повторяющихся id, если вы хотите получить только список id, то
    код и выхлоп под спойлером
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    public class dt
    {
        public int id;
        public int val;
    }
    
    namespace distinct_or_not_distinct
    {
        public static class Program
        {
            public static void Main()
            {
                var listdata = new List<dt>();
                listdata.Add(new dt() { id = 1, val = 11 });
                listdata.Add(new dt() { id = 1, val = 12 });
                listdata.Add(new dt() { id = 2, val = 21 });
                listdata.Add(new dt() { id = 2, val = 22 });
                listdata.Add(new dt() { id = 3, val = 31 });
                
                "distinct dt".print();
                listdata.Distinct().ToList().print();
                newLine();
    
                "distinct id".print();
                (from d in listdata select d.id).Distinct().ToList().print();
                newLine();
    
                var targetId = 2;
                $"target id {targetId}".print();
                listdata.Where(d => (d.id == targetId)).ToList().print();
                newLine();
            }
    
            public static void print(this List<dt> l) { foreach (var d in l) d.print(); }
            public static void print(this dt d) => Console.WriteLine($"\tid:{d.id} val:{d.val}");
    
            public static void print(this List<int> l) { foreach (var i in l) i.print(); }
            public static void print(this int i) => Console.WriteLine('\t' + i.ToString());
            public static void print(this string s) => Console.WriteLine(s);
            public static void newLine() => Console.WriteLine();
        }
    }
    0wU4V8f.png
    Ответ написан
    Комментировать
  • .Net или сразу Net.core для полного нуля в программировании?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Core.
    традиционный дотнет 4.8 последний релиз. где то через год будет .Net 5, снова единый, но уже кроссплатформенный
    proof - https://habr.com/ru/company/raiffeisenbank/blog/451136/

    ps пикантность ситуации в том, что книги фатально отстают от реальности. все заслуженно уважаемые издания, пишут про виндовый, "традиционный" дотнет. а МС его уже подписал в утиль. пока вы более менее освоитесь в программировании (год минимум), он уже будет конкретным легаси. а все новье буду пилить на 5м дотнет, который вырастет из нынешней корки 3. номер в 4 в релизах корки, пропускается по политическим и психологическим причинам - что бы не было путаницы с 4.* традишеном

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

    совет - учите оба ;)
    Ответ написан
    Комментировать
  • Параллельное сохранение файла консоли где я хочу?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ну тогда уж гуглите 'mirror stdout', а то 'redirect stdout' именно перенаправит вывод в куда то. на экране будет пусто
    или даже временный файл где все это на самом деле хранится
    не такого
    что то подсказывает мне, что есть некая область памяти
    такое есть, это буффер вашего stdout, но для начала он под капотом системы. если в линуксе, то это одна история, если винде, то абсолютно другая. про винду добавлю - можете погрызть win32 api. с одной стороны гарантированно возможно залезть грязными ручками, даже из шарпа, в буффер stdout. с другой стороны гарантированно придется сильно напрягать мозги (с непривычка, а так то там ни че страшного) и много гуглить. а еще, в процессе такого обучения, наверняка иногда будете ронять систему. я так думаю. ибо если бы вы уже имели опыт общения с win32 api, то вряд ли бы задавали этот вопрос

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

    OMG

    iamserge,
    Я хотел как КРАСИВО! То есть продублировать еще раз, как все, но так чтобы КРАСИВО, как будто я не занимаюсь черти чем, а делаю не как все и весь такой молодец. Понимаете почему?
    понимаю только что до вас не доходит абсолютно
    То есть все таки нет? https://www.opennet.ru/docs/RUS/bash_scripting_gui...
    Хм, нашел такая штука ... Оно Linux судя по всему, но суть ясная ... это вообще команда консоли, что судя по всему означает, что надо в "этом состоянии" запуститься ... Хм, мысль интересная ... Пока не выглядит красивым, что жаль.
    то что вы нашли, это перенаправление. я об этом раз пять уже сказал. в винде тоже самое, с небольшими отличиями:
    если у вас выхлоп без диалога, то все просто до отвращения - пишете скрипт, в котором перенаправляете в "куда хочу" выхлоп проги, а уже после ее оокончания, выводите его еще и на экран
    а потоки ввода вывода, не смотря на различия в исходниках ядер операционнах систем GNU Linix и MS Windosw, иделогочески работают абсолютно одинаково. api разные. но идеология одна. перенаправить выхлоп готовой проги в скрипте элементарно, даже оператор для скриптов одинаковый >. но если вы захотите дублировать вывод (а именно так звучит ваш вопрос)
    Параллельное сохранение файла консоли где я хочу?
    то придеся лезть в системное программирование. и в Linix и Windosw

    и последний раз повторяю - если вы пишете свою собственную программу на C# (!!! а таков тег вопроса), сделать свою функцию-заменитель Console.WriteLine()не соизмеримо проще. и в реализации. и в использовании
    Ответ написан
    9 комментариев
  • Где ошибка в коде с#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ошибка в строке 18
    SpeechRecogitionEngine sre = // буковку n пропустили

    сейчас проще использовать ключевое слово var, код легче читаетсяvar sre =
    а других ошибок в этом коде нет (скрин под спойлером)
    ToYzQDS.png
    даже подчеркивание на ru-RU это спелчекер а не компилятор

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

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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    из каментов
    fullunpack --keep "C:\alldata\alldata.bin" zlib nY/RHn+XH8T77 64
    zlib это кодек
    nY/RHn+XH8T77 это sid
    64 это длина ключа

    пока что валимся на кодеке, за все остальное не известно
    VS крутой инструмент, в дебагере оказалось легко заметить, что кодаков всего два. точнее 3 варианта параметра zlib, zstd, zstandard, но 2 из них синонимы

    правильная строка параметров
    fullunpack --keep "C:\alldata\alldata.bin" zstd nY/RHn+XH8T77 64


    но на этом мытарства не заканчиваются, библиотека кодека zstandard.net кросс платформенная, но использует сторонние бинарные libzstd.dll, которые различны для x86 и x64, по этому копируются в выходной каталог приложения в подпапки. надо скопировать нужную (по разрядности операционки) в выходной каталог приложения
    пришлось..
    еще немного поскрипеть мозгами и погуглить, что бы разгадать этот ребус

    и последний вопрос - вам в паблик выложить начинку? или свяжтесь в личке? ))
    ps если не свяжетесь в течении 5-10 минут, здесь и выложу
    время вышло

    вот ваш контент https://1drv.ms/u/s!AiSqqnKTCEDNkYdFZT0Pv-YnGbLTpQ...
    что требовалось
    что бы собрать с нуля самостоятельно
    - установить VS2019 Community
    - выбрать рабочую нагрузку .Net Core
    - в "отдельных компонентах" поставить галочку ".Net Core 2.2 runtime"
    - форкнуть проект по ссылке прямо в студии
    - сменить режим просмотра с "папки" на "решение" (автор проекта работает в VS Code)
    - в диспетчере пакетов Nuget, освежить пакеты (когда предлагает обновления, лучше этого не делать)
    - в параметрах проекта, на вкладке Debug, ввести корректную строку параметров
    - собрать приложение
    - скопировать нужную libzstd.dll в выходной каталог
    - запустить и получить содержимое бинарника

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

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

    мне тут подсказали, что нужно перехватить stdin запущенного процесса

    то что вам подсказали, можно/нужно(?) делать до запуска целевого приложения

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

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

    pps в терминах винды (и при текущей формулировке вопроса), вам надо что то вроде хука на запуск приложения. это возможно (я так думаю) но потребует изучения. возможно усердного
    Ответ написан
    Комментировать
  • Есть ли замена Visual Studio для слабых ноутбуков на Windows 10?

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

    2 - лучший редактор на на замену VS - VS Code (если ваш ноут тянет Хром - потянет и VS Code upd если Хром уже тяжело - notepad++ для подсветки синтаксиса и голые SDK, уже можно творить)

    ps люди на F# пишут винформовские и WPF приложения.. как? ведь дизайнеры студии поддерживают только C# и VB ;))... просто - ручками. берут и пишут. погуглите, поищите на github

    .. ну а там глядишь, может и на апгрейд заработаете. хотя подработку можно найти не только в области ИТ. это же вопрос желания и упорства.. кто то упирается рогом, и покупает машину, или даже квартиру.. а тут ноут ;))
    Ответ написан
    Комментировать
  • На чем пишут десктоп приложения на Java/C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ну тогда уж сосвоей стороны докину..

    На счет C# очень много противоречия, между старой Form и WPF, какую использовать


    ни каких противоречий:
    - "набросать на коленке" простенький UI это формы. но они не держат корректно масштабирование экрана. обещают что скоро будут, но пока нет
    - полноценный интерфейс это WPF
    - а еще есть AvaloniaUI (тоже на XAML, со своими плюшками, но есть и разница в поддержке проекта корпорацией (WPF) и сообществом (AvaloniaUI))
    - есть UWP (вин 10 aka метро UI)
    - есть Electron.NET (но лично я противник таскать за собой копию целого браузера)
    - есть даже GTK# и обертки для QT

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

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

    ps
    о кроссплатформенности C# - .Net Core + (AvaloniaUI или Electron.NET) или Xamarin (XAML)
    о семействе Electron.* - современный Skype и VS Code написаны на Electron
    о винде - кровавый энтерпрайз плотно сидит на WPF
    о фрилансе - UWP самый короткий путь выставить в витрину магазина MS свое платное приложение для вин 10 (если конечно у вас есть стоящие идеи)
    pps если хочется в Google Play выставляться, и знаете C# а Java смущает - тогда Xamarin (но многие считают что лучше Kotlin ;)))
    Ответ написан
    Комментировать
  • Как убирать пустоту из листа, оставшуюся после уничтожения объектов, в него входящих?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - при использовании foreach ни сама коллекция (лист, массив, перечисление, не важно) ни ее элементы, не подлежат изменению. только чтение. это правило языка C# (но за Mono не отвечаю)

    2 - про использовании for обходите коллекцию с конца, а не сначала, таким образом не будет проблем с индексами (хотя можно и while использовать для обхода с головы, но на for думаю быстрее поймете суть). пример
    for(int i = Group.Count - 1; i >= 0; i--)
    {
      Destroy(list[i]);
      list.RemoveAt(i); // о размере списка не заморачиваемся вообще
    }


    3 - Unity поддерживает LINQ? там можно было бы еще элегантнее. но LINQ всегда проигрывает по производительности, которая в играх обычно важна. тем не менее
    Group.RemoveAll(tmp => tmp is MissingReferenceException);
    // хотя надо проверить совместимость

    upd вообще то выходит Destroy не делаем. тогда теряется вся элегантность.. ну или надо подольше подумать ))

    ps ну тогда уж и while это примерно так
    var i = 0;
    while (i < Group.Count)
      if (Group[i] is MissingReferenceException)
      {
        Destroy(Group[i]);
        Group.RemoveAt(i);
      }
      else
        i++;

    ну и хардкорное применение for приктически так же выглядит
    for (var i = 0; i < Group.Count;) // да да, инкримент просто не пишем и получается аналог while
      if (Group[i] is MissingReferenceException)
      {
        Destroy(Group[i]);
        Group.RemoveAt(i);
      }
      else
        i++;
    Ответ написан
    Комментировать
  • Как организовать взаимодейтсвие двух форм ввода данных с третьей формой-справочником?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    по фрагментам:
    1 - тут вы создаете форму в локальной переменной form и отображаете как диалог. модально кстати, а не модельно.. если слово смущает, просто нагуглите модальное окно ))
    2 и 3 - финт с var frm = this.Owner; избавляет от незнания переменной, указывающей на экземпляр класса. но именно тут и возникает ваша проблема

    решения:
    - попробуйте рассматривать переменные главного окна, как глобальные, по отношению ко всем порождаемым окнам/диалогам. тогда можно применить другой финт - описать в классе главного окна (здесь видимо frmLScheta) поля форм нужных типов (допустим frmSprStreet SprStreet). и пользоваться ими вместо локальных переменных. получится что то вроде
    var frm = (this.Owner as frmLScheta).SprStreet;
    но такой прием требует обязательной проверки на SprStreet на null
    - более классический прием состоит в создании своего конструктора для дочерних форм (да вообще чего угодно), куда можно передавать и нормально типизированное значение главной формы, и сколь угодное количество смежных форм. естественно в классе должны быть предусмотрены соответствующие типизированные поля, куда конструктор и сохраняет эти значения (указатели по существу). проверка на null так же обязательна. ее можно выполнять в конструкторе, но надежнее в каждом методе, где такой указатель используется.

    ps

    1 - слышали понятие best practices?.. так во у вас bad practices.. попробуйте открыть 2 экземпляра frmSprStreet и работать параллельно. ну и быстро все поймете
    2
    Ничего не понял
    выходит лукавите. поняли, но не очень удачно. при этом удаляете свой камент. да еще и медальку вешаете себе - тройное лукавство. фу
    Ответ написан
  • Как скачать страницу полностью, а не только чистый html?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    на одном только тостере - https://www.google.com/search?client=firefox-b-d&e...
    ps
    пара мыслей в догон..

    - в запрос можно добавить C# .. справитесь самостоятельно?
    - знаете анекдот?.. когда гинеколог убил циганку молотком.. оочень старый.. если не знаете - загуглите
    Ответ написан
    Комментировать
  • Как организовать хранение объекта с таймером на сервере без СУБД?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Комментировать
  • Тестовое задания - написать свой видео проигрыватель, сложно ли это?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    не верная постановка вопроса:
    - смогу ли я сам? (отвечать вам, самому себе)
    - сколько стоит? и где найти исполнителя на халяву? и это опять НЕ сюда (не на тостер)
    Ответ написан
    Комментировать
  • Как формировать веб-страницу без пересоздания?

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

    MVS.NET не связан такими ограничениями как ViewState, тем не менее, решения частичного обновления фрагментов все равно те же - ajax, frame, и конечно же средства современных фреймворков типа react, angular, vue, другие подобные.. ну и любой рукописный js код тоже
    Ответ написан
    Комментировать
  • Производительность С++ и С#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Unity != .Net FrameWork
    юнити основан на моно и использует il2cpp
    и если авторы рекомендаций об этом не знали, это их проблемы
    Ответ написан
    Комментировать
  • C# WindowsForm как вывести элементы из массива в TextBox без повторений?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    char[] m = default;
    // что означает вообще null
    // где то чем то заполняем m
    var m2 = m.Distinct();
    // m2 будет иметь тип IEnumerable<char> и содержать только уникальные элементы
    // если нужен массив, тогда так
    var m2 = m.Distinct().ToArray();
    // если нужен лист, тогда так
    var m2 = m.Distinct().ToList();
    // исходный m тоже может быть и List и IEnumerable, будет работать для любого варианта
    Ответ написан
    Комментировать
  • Как подключится к 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...
    Ответ написан