Задать вопрос
  • В чем проблема?

    DanielMcRon
    @DanielMcRon
    C# && Unity
    Подключить библиотеку
    using System.Threading
    Ответ написан
    Комментировать
  • Что обозначает символ в формуле?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Что у вас не установлен математический шрифт в ворде, или где вы там смотрите.
    Ответ написан
    4 комментария
  • Как вернуть 2 значения из метода?

    (int a, int b) Get() { return (1, 2);}
    Ответ написан
    Комментировать
  • Как отправить данные из WebHook в WinForm?

    petermzg
    @petermzg
    Самый лучший программист
    WebHook для Viber у вас может быть только на выделенном IP, иначе запрос не пройдет.
    Там у вас и разместиться webserver, что будет обрабатывать запросы.
    WinForm это клиентское приложение, значит оно тоже должно к серверу конектится.
    Так что скорее прохождение данных такое
    Viber ->[WebHook]->.net mvc server->[web sockets]->WinForm
    Ответ написан
    6 комментариев
  • Массив. Количество одинаковых значений?

    shai_hulud
    @shai_hulud
    Если это небольшие числа, то аллоцировать на стеке N+1 байт, где N это самое большое число, потом пройтись по искомому массиву и каждый раз когда встречается число M, то а аллоцированном массиве байт по сдвигу M инкрементить байт на 1 (и следить за переполнением, либо использовать по 2-4-8 байта на счетчик).
    Потом пройтись по этим данным и узнать какое число сколько раз встретилось.
    Пример на псевдокоде:
    byte* buffer = stackalloc byte[maxNumber+1];
    foreach(int number in numbersArray)
    {
        buffer[number]++; // может переполниться
    }
    for(var i = 0; i < maxNumber+1; i++)
    {
        var count = buffer[number];
        if (count > 1)
        {
            Console.WriteLine($"Number {i} met {count} times");
        }
    }
    Ответ написан
    Комментировать
  • Массив. Количество одинаковых значений?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Почему не база данных, можно как и в базе данных:
    using System.Linq;
    
    var list = new List<int>() { 1, 5, 5, 4, 7, 5 };
    var gr = list.GroupBy(e => e);
    foreach (var line in gr)
    {
        Console.WriteLine("{0} => {1}", line.Key, line.Count());
    }
    Ответ написан
    Комментировать
  • Где хранить большое кол-во файлов?

    petermzg
    @petermzg
    Самый лучший программист
    5. Использовать облачное хранилище с уже имеющимся API (Azure, Google, Amazon storage или менее именитые)
    Ответ написан
    3 комментария
  • Как сделать сокращение чисел?

    GavriKos
    @GavriKos
    Разделить score на 1000.
    Ответ написан
    Комментировать
  • WPF: Как в ToolTip загнать результат статического метода, в который передается значение из модели?

    WNeZRoS
    @WNeZRoS
    Совсем без кода не получится. Нужно сделать IMultiValueConverter, куда биндить строку и число. В самом конвертере вызывать этот статичный метод. При этом TextBlock что возвращается должен быть новым (нигде до этого не использованным), а то будут краши.
    Ответ написан
    Комментировать
  • Где в MVVM разместить глобальный класс?

    @SZolotov
    Asp.net core, MAUI,WPF,Qt, Avalonia
    Почитайте про DI контейнеры
    Ответ написан
    Комментировать
  • Как сделать вывод в цикле один раз?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    ну тогда уж:
    int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
    bool s = true;
    for (int i = 0; i < a.GetLength(0) && s; ++i)
      for (int j = 0; j < a.GetLength(1) && s; ++j)
        s &= a[i, j] == a[j, i];
    Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");

    при этом можно и просто присваивать контрольке значение
    int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
    bool s = true;
    for (int i = 0; i < a.GetLength(0) && s; ++i)
      for (int j = 0; j < a.GetLength(1) && s; ++j)
        s = a[i, j] == a[j, i];
    Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");

    а можно проверять квадратность матрицы до начала циклов, а так же перебирать "треугольник"
    spoiler
    using System;
    
    namespace simm_array
    {
        class Program
        {
            static void Main(string[] args)
            {
                var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                var s = w == h;
                for (var x = 0; x < w && s; ++x)
                    for (var y = x; y < h && s; ++y)
                        s = m[x, y] == m[y, x];
                Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
            }
        }
    }

    в каментах предложено не сканировать главную диагональ.. и это логично! )) .. ну собственно и просто делается
    spoiler
    using System;
    
    namespace simm_array
    {
        class Program
        {
            static void Main(string[] args)
            {
                var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                var s = w == h;
                for (var x = 0; x < w && s; ++x)
                    for (var y = x + 1; y < h && s; ++y)
                        s = m[x, y] == m[y, x];
                Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
            }
        }
    }

    ну и немного функционального стиля+синтаксического сахара
    spoiler
    using System;
    
    namespace simm_array
    {
        static class Program
        {
            static void Main(string[] args)
            {
                var m = new int[,] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
                m.dump();
                m.isSymmetrical().report();
            }
    
            static bool isSymmetrical(this int[,] m)
            {
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                var s = w == h;
                for (var x = 0; x < w && s; x++)
                    for (var y = x + 1; y < h && s; y++)
                        s = m[x, y] == m[y, x];
                return s;
            }
    
            static void dump(this int[,] m)
            {
                var w = m.GetLength(0);
                var h = m.GetLength(1);
                for (var x = 0; x < w; x++)
                {
                    for (var y = 0; y < h; y++)
                    {
                        Console.Write($"\t{m[x, y]}");
                    }
                    Console.WriteLine();
                }
                Console.WriteLine();
            }
    
            static void report(this bool s) => Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
        }
    }

    выхлоп
    1P9RDij.png
    Ответ написан
    6 комментариев
  • Как сделать вывод в цикле один раз?

    bingo347
    @bingo347
    Crazy on performance...
    int[,] a = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
    bool s = true;
    for (int i = 0; s && i < a.GetLength(0); ++i)
      for (int j = 0; s && j < a.GetLength(1); ++j)
        s = s && a[i, j] == a[j, i];
    Console.WriteLine(s ? "Симметрична" : "Ne simmetrichna");
    Ответ написан
    2 комментария
  • Как добавить grammar файл в готовый exe-файл?

    @Sumor
    у Grammar есть конструктор, принимающий Stream.
    Соответственно, вы ресурс представляете в виде Stream (например, через GetManifestResourceStream) и подставляете в конструктор.
    Ответ написан
    7 комментариев
  • Как запустить Console Application (.NET Core) на windows, как приложение, т.е. не через студию?

    @Mo__Ro
    Developer c#, php, java, html
    Можно так
    dotnet publish -r win-x64
    и будет тебе Exe файл.
    https://docs.microsoft.com/en-us/dotnet/core/tools...
    Ответ написан
    Комментировать
  • Лабиринт "Диагональ" в c#. Как сделать?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Если проверки на наличие стены нету, то могу предложить только реверснуть алгоритм рисования лабиринта, по всей видимости, это модифицированный алгоритм Брезенхэма. Я про него даже писал статью, код можно посмотреть здесь. Вам нужно просто немного условие рисования поменять.
    Ответ написан
    Комментировать
  • Как сделать эффект матового стекла на css?

    backdrop-filter

    Но у него пока всё плохо с внедрением. Насколько я знаю, работает только в сафари.
    Ответ написан
    Комментировать
  • Class libriry .Net. В чем разница?

    Nipheris
    @Nipheris Куратор тега C#
    1. .Net Framework и .Net Core - различные реализации интерфейсов и спецификаций, которые в народе и называют "дотнетом". Туда же - Mono.
    2.
    В чем разница, какую выбрать и одинаков ли на них код?

    Разница в доступных API. У каждой из реализаций свой набор стандартных классов, где-то больше, где-то меньше. .Net Standard - это как рази таки ОБЩИЙ стандарт доступных API. Будете разрабатывать под .Net Standard - ваша библиотека будет работать на всех реализациях которые его поддерживают. Обратите внимание что версий .Net Standard несколько - чем старше версия тем больше доступных API, но тем больше вероятность что некая версия некой реализации не поддерживает конкретную версию .Net Standard (если нужно подробнее - поищу ссылки).
    3.
    какую выбрать

    Выберете .Net Standard - сможете запустить везде, но не будут доступны API специфичные для конкретной реализации. Выберете .Net Framework - будут доступны все API классического Framework но портируемость может быть потеряна. Выбирайте .Net Standard пока не упрётесь (если вообще упретёсь) в то, что вам нужно API которое есть только в .Net Framework.

    То, что сказал freeExec про Standard не имеет ничего общего с реальностью, C++ и нативные dll тут не при чём.
    Ответ написан
    1 комментарий
  • Как исправить размытый текст в Windows Forms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Гуглите DpiAware — изучите проблемы и выберете оптимальное решение для себя. Тут проблема в диком легаси наследии, реализованном через костыли и которое пытаются сохранить, добавляя исправления в виде костылей, которые генерируют новые баги и в новых версиях это пытаются исправить опять костылями. Кроме того, алгоритм работы масштабирования немного отличается в разных версиях ОС. Так что очень рекомендую проверять работу приложения в разных версиях ОС (7, 8.1, 10 Home, 10 Enterprise LTS) и с выключенным и включенным масштабированием. Да-да, в домашней десятке и в корпоративной долгосрочной десятке можно получить разный результат.

    Вариант 1 — вызов специальной функции в коде (реальный код, который я использую — плюс вторая функция для масштабирования шрифтов, тык — примерно так получается в 4к):
    const int WinDefaultDPI = 96;
    
    /// <summary>
    /// Исправление блюра при включенном масштабировании в ОС windows 8 и выше
    /// </summary>
    public static void DpiFix()
    {
        if (Environment.OSVersion.Version.Major >= 6)
        {
            SetProcessDPIAware();
        }
    }
    
    /// <summary>
    /// WinAPI SetProcessDPIAware 
    /// </summary>
    /// <returns></returns>
    [DllImport("user32.dll")]
    private static extern bool SetProcessDPIAware();
    
    /// <summary>
    /// Исправление размера шрифтов
    /// </summary>
    /// <param name="c"></param>
    public static float DpiFixFonts(Control c)
    {
        Graphics g = c.CreateGraphics();
        float dx = g.DpiX
            , dy = g.DpiY
            , fontsScale = Math.Max(dx, dy) / WinDefaultDPI
        ;
        g.Dispose();
        return fontsScale;
    }


    Плюс все формы имеют следующий конфиг (код, вызываемый в конструкторах форм):
    this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;


    Учтите, что AutoScaleDimensions — в конструкторе выставляется автоматически в зависимости от разрешения и DPI вашего монитора. Поэтому я не использую конструкторы. Иначе, при запуске приложения на разных машинах с разным DPI можно получить очень неожиданные результаты.

    Вариант 2 (v4.7):
    app.config
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
      </startup>
      <System.Windows.Forms.ApplicationConfigurationSection>
        <add key="DpiAwareness" value="PerMonitorV2" />
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
      </System.Windows.Forms.ApplicationConfigurationSection>
    </configuration>


    Вариант 3 (v4.7):
    app.config
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
      </configSections>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
      </startup>
      <System.Windows.Forms.ApplicationConfigurationSection>
        <add key="DpiAwareness" value="PerMonitorV2" />
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
      </System.Windows.Forms.ApplicationConfigurationSection>
    <configuration>


    Вариант 4:
    app.manifest
    <!-- Указывает, что приложение поддерживает определение DPI и не будет автоматически масштабироваться Windows при более высоких
           значениях DPI. Приложения Windows Presentation Foundation (WPF) по умолчанию поддерживают определение DPI, им не нужно 
           специально включать параметр для этого. Для приложений Windows Forms на платформе .NET Framework 4.6, для которых задан этот параметр, необходимо 
           также задать для "EnableWindowsFormsHighDpiAutoResizing" значение "true" в файле app.config.-->
      <application xmlns="urn:schemas-microsoft-com:asm.v3">
        <windowsSettings>
          <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
        </windowsSettings>
      </application>
    Ответ написан
    6 комментариев
  • Есть ли адекватный способ запускать и дебажить код из линукса по локалке на удаленной винде?

    Griboks
    @Griboks Куратор тега C#
    Устанавливаешь любое приложение с удалённым рабочим столом (rdp, teamviewer) и работаешь удалённо.
    Рядом стоит стационарник с Win10

    Хотя есть идея получше: садишься за комп и работаешь!
    Ответ написан
    Комментировать
  • Как создать экземпляр класса из динамически подключенной DLL?

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    var assembly = Assembly.LoadFrom("c:\plugins\table.dll");
    var type = assembly.GetType("MyNamespace.Table");
    var instance = (ITable) Activator.CreateInstance(type);


    P.S. Пример полного работающего решения:
    Common.dll / IPlugin.cs
    namespace Common
    {
        public interface IPlugin
        {
            string GetName();
        }
    }
    Plugin.dll / Plugin.cs
    using Common;
    
    namespace Plugin
    {
        public sealed class Plugin : IPlugin
        {
            public string GetName()
            {
                return "Cool Plugin!";
            }
        }
    }
    PluginsTest.exe / Program.cs
    using Common;
    using System;
    using System.Diagnostics;
    using System.Linq;
    using System.Reflection;
    
    namespace PluginsTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                var plugin = LoadPlugin("..\\..\\..\\Plugin\\bin\\Debug\\Plugin.dll");
                var name = plugin.GetName();
                Debug.WriteLine("Plugin loaded: " + name);
            }
    
            static IPlugin LoadPlugin(string path)
            {
                var type = Assembly
                    .LoadFrom(path)
                    .GetTypes()
                    .First(typeof(IPlugin).IsAssignableFrom);
    
                return (IPlugin)Activator.CreateInstance(type);
            }
        }
    }

    Зависимости:
    Plugin.dll → Common.dll
    PluginsTest.exe → Common.dll
    Ответ написан