Задать вопрос
Ответы пользователя по тегу C#
  • В чем суть скрипта? Что он делает?

    Что-то в Powershell запускает (видимо эксплойт какой-то)
    В base64 строке закодировано:
    function Invoke-MS16-032 {
    <#
    .SYNOPSIS
        
        PowerShell implementation of MS16-032. The exploit targets all vulnerable
        operating systems that support PowerShell v2+. Credit for the discovery of
        the bug and the logic to exploit it go to James Forshaw (@tiraniddo).
        
        Targets:
        
        * Win7-Win10 & 2k8-2k12 <== 32/64 bit!
        * Tested on x32 Win7, x64 Win8, x64 2k12R2
        
        Notes:
        
        * In order for the race condition to succeed the machine must have 2+ CPU
          cores. If testing in a VM just make sure to add a core if needed mkay.
        * The exploit is pretty reliable, however ~1/6 times it will say it succeeded
          but not spawn a shell. Not sure what the issue is but just re-run and profit!
        * Want to know more about MS16-032 ==>
          https://googleprojectzero.blogspot.co.uk/2016/03/exploitinfE&6W74f&6W72РD6&W7VBW&V3%ӣ66TFRE&6W74fF&VBРРР2'V76Rb7FvF6bVFvR66PРE7F'EFV&6R7FРE6fTwV&B7FРЧ

    base64 строка при этом походу сломанная. Гуглёж "MS16-032" выдаёт вот этот скрипт: https://gist.github.com/ssherei/41eab0f2c038ce8b35...
    Ответ написан
    Комментировать
  • Почему не сохраняются настройки темы?

    vabka
    @vabka Куратор тега Веб-разработка
    1. Это явно не то что вам нужно: http:////metanit.com/sharp/aspnet5/21.3.php
    2. Через куки можно так: https://metanit.com/sharp/aspnet5/2.11.php
    3. Ещё можно сохранить на фронтенде через https://developer.mozilla.org/ru/docs/Web/API/Wind...
    Ответ написан
    Комментировать
  • Как найти среднее число массива с помощью кода C#?

    Вообще, это очень похоже на "медианное среднее"
    Т.е. при помощи циклов и условных операторов, чтобы было понятно как это работает, чтобы не было скрытых действий таких, как myArray.Max. или myArray.Min.

    Я не хочу переизобретать простые операции, так что развернёшь их сам.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    var array = new[] {3, 10, 16, 2, 8};
    var result = FindMediumPoint(array);
    Console.WriteLine(string.Join(" ", result));
    
    static IEnumerable<int> FindMediumPoint(int[] sequence)
    {
    	var min = sequence.Min(); // Минимум
    	var max = sequence.Max(); // Максимум
    	var diff = max - min; // Разброс между минимумом и максимумом
    	var avg = diff / 2; // Середина "Разброса"
    	var center = min + avg;
    	var actualCenterDiffs = sequence
    		.Select(number => number - center) // Находим отклонение числа
    		.GroupBy(Math.Abs) // Группируем те числа, у которых одинаковое абсолютное отклонение
    		.OrderBy(x => x.Key) // Сортируем в порядке увеличения отклонения
    		.First(); // Берём первое по порядку (минимальное)
    	return actualCenterDiffs
    		.Select(diff => diff + center); // Применяем отклонение к найденному центру;
    }

    В коде алгоритм в принципе выглядит так, как я бы решал самостоятельно.
    Ответ написан
    Комментировать
  • Где можно прочесть ECMA-334 на русском языке?

    Нигде, да и смысла нет, тк он не супер актуальный.
    Самая актуальная спецификация лежит на https://github.com/dotnet/csharplang
    Ответ написан
    2 комментария
  • C чего начать изучение Unity со знанием и опытом в C#?

    С документации
    Ответ написан
    Комментировать
  • Как Dictionary.KeyCollection преобразовать (или привести тип) в массив?

    var dictionary = new Ditionary<string, string>();
    string[] keys = dictionary.Keys.ToArray(); // ToArray - это метод-расширение (extension method)

    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Ответ написан
    Комментировать
  • Как удалить все символы, кроме нужных?

    Похоже на кейс для регулярок.
    В вашем случае будет
    (TypeItem-[^\-]*-Count)-
    Ответ написан
    Комментировать
  • Как сохранить Dictionary в файл, с возможностью измениния значений в файле?

    Я бы предпочёл использовать какой-нибудь из существующих форматов: json, yaml, ini, toml.
    Но в принципе парсер вашего формата пишется в 5 строчек (буквально)
    Запись:
    var dictionary = new Dictionary<string, string>();
    var sb = new StringBuilder();
    foreach(var kv in dictionary) { // В принципе, можно оптимизировать, если писать не в StringBuilder, а сразу в стрим, который ассоциируется с файлом.
        sb.AppendLine($"{kv.Key}={kv.Value}");
    }
    var text = sb.ToString();
    // Дальше пишем text в файл.


    Чтение:
    var dictionary = new Dictionary<string,string>();
    var lines= File.ReadAllLines("pathToFile"); // читаем построчно
    foreach(var line in lines) {
      var tokens = line.Split("=");
      var key = tokens[0].Trim();
      var value = string.Join("", tokens.Skip(1)).Trim();
      dictionary[key] = value;
    }
    // Используем dictionary как хотим


    UPD: Я вспомнил, что мне этот формат напоминает. Это же dotenv
    Ответ написан
    3 комментария
  • Как выводить графику в wpf, ПОЧЕМУ У МЕНЯ зависает окно на 1-2 секунды, после любого изменения размеров окна?

    1. Картинку рисуй в фоновом потоке, а выводи в основном
    2. Не используй System.Drawing - он тормозной. Посмотри в сторону skia
    Для 3d есть opengl и другие специальные api для рисования при помощи видеокарты.
    Ответ написан
    Комментировать
  • Как запустить потоки поочередно?

    Join блокирует вызывающий поток, пока не завершится тот, который джоинят.
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Возможно, вам нужны не потоки, а таски и async/await.
    Ещё вы можете использовать коллбэки, чтобы запускать новый поток после завершения старого (но если честно, это какая-то синтетическая задача - в такой ситуации можно всё в одном потоке выполнить)
    Ответ написан
    Комментировать
  • Почему экземпляр производного класса приводят к базовому абстрактному типу?


    Говорят, что экземпляр производного класса, наследующийся от абстрактного (класса, интерфейса), принято приводить к базовому типу. Почти всегда.

    Ни разу о таком не слышал. Мне кажется, это какой-то бред сумасшедшего, который ни разу не написал ни одной строчки кода.

    На C# очень многие используют стиль VIP (var if possible), в таком стиле ваш код будет выглядеть так:
    var instance = new  DerivedClass();
    instance.Method1(); // Красиво, компактно, никаких проблем.
    instance.Method2();


    В коде выше, из за приведения к базовому абстрактному типу, мы вынуждены создавать 2 экземпляра класса.

    Нет. Можно написать так:
    DerivedClass instance= new DerivedClass(); // только 1 экземпляр
    Interface1 instance1 = instance; // Но всё равно очень громоздко.
    Interface2 instance2 = instance;


    Не нужна "лишняя" операция приведения (апкаст).

    Апкаст - это бесплатная операция.

    Единтвенный лучай, когда нужно приводить класс к интерфейсу - это явная реализация интерфейса (без апкаста тупо не получится вызвать его методы)
    PS: простой код лучше сложного.
    Ответ написан
    5 комментариев
  • Как обновить значение переменной?

    Каждый тик таймера вы устанавливаете определённое значение переменной.
    В вашем случае нужно где-то сохранять данные об оставшемся количестве.
    Предлагаю вам завести класс, который хранит количество всего и поместить их в словарь.
    Будет что-то наподобие
    private Dictionary<string, Item> Inventory = new () {
        ["Дробовик"] = new () { Damage = 36, Clip = 30, Stock = 60 },
        ["Автомат"] = new () { Damage = 30, Clip = 30, Stock = 60 },
        ["Базука"] = new () { Damage = 51, Clip = 1, Stock = 2 }
    };
    public Item SelectedItem {get; set;}
    private void timer1_Tick(object sender, EventArgs e) {
      SelectedItem = Inventory[combobox.Text];
    }

    А потом там где вы выводите текст:
    label1.Text = SelectedItem?.Clip.ToString() ?? "";
    Ответ написан
    Комментировать
  • Как защититься от SQL инъекции в asp.net core? правильно ли я пишу?

    Сначала по пунктам, как ты делаешь:
    1. Кривое именование. Dapper позволяет маппить имена колонок к именам свойств.
    2. Похоже на ок, но стоит разбить интерфейс. Тк, скорее всего, не для всех сущностей будут нужны все эти методы.
    Именование не ок.
    dbConnection стоит переиспользовать.
    dbConnection.Dispose руками писать не нужно, тк dbConnection и так завёрнут в using
    SELECT * лучше не использовать
    Правильно ли я делаю?

    Не совсем

    Нет ли ошибок?

    Есть

    Как можно защититься от инъекции?

    Валидировать ввод.
    Не уверен, проверяет ли даппер сам параметры, но вы используете параметризованные запросы - так что должно быть ок.
    Если что - можете сами попытаться провести инъекцию (сами состаьте запрос или через burp suite)

    Например, в php экранировали вводимую пользователем форму например htmlspecialchars, надо ли на net core так же делать?

    Dapper сам должен это делать.
    Ответ написан
    Комментировать
  • Как сделать ссылку на проект?

    Ссылку на проект - это в csproj надо написать
    <ItemGroup>
      <ProjectReference Include="../OtherProject/OtherProject.csproj"/>
    </ItemGroup>

    А то что "Ссылки: 0" - это то, в каких местах идёт явное обращение к подсвеченному методу.
    Ответ написан
    Комментировать
  • Как подавить автогенерацию метода ToString у record в c#?

    В record'е можно реализовать ToString явно - тогда не сгенерируется его дефолтная версия.
    Или можно тупо не использовать рекорды

    UPD: Поэкспериментировал с рекордами и вот вывод:
    1.
    sealed override string ToString()
    Так можно делать только в sealed record
    2. Рекорд не наследует ToString от родителя - вместо этого он определяет свой собственный
    3. В рекоде можно спокойно переопределить ToString
    Если вы не хотите переопределять ToString во всех рекордах, то, возможно, вам нужны не рекорды, а обычные классы.
    Ответ написан
    2 комментария
  • Как из inputField получить int?

    InputField input = ...;
    int number = int.Parse(input.text); // если в input.text будет лежать не число, то будет FormatException

    либо

    InputField input = ...;
    if(int.TryParse(input.text, out var number) {
      // используем number. В этом случае FormatException не выпадет, но тогда будет возникать ощущение, будто ничего не работает.
    }
    Ответ написан
  • Как решить ошибку FormatException: Input string was not in a correct format. unity?

    str = int.Parse(inf_ot.text);
    str2= int.Parse(inf_do.text);

    У вас в inf_ot и ind_do не числа.
    Приведите пример текста, который хотите спарсить.

    PS: Но вообще код какой-то дикий. Я советую вам отложить юнити на потом и пока учить чистый C#.
    Замечания по коду

    public void Random()
    {
        str += str2 = otv; // Не будет работать, либо будет работать не так, как вам нужно.
    }

    R_Main - какое-то дикое сокращение, которое ничего не говорит о смысле скрипта. + В C# принято использовать PascalCase - никаких нижних чёрточек
    inf_ot, inf_do - То же самое, но ещё и транслит "от" "до"
    otvet - то же самое
    int str, str1 - лишнее сокращение + обман читателя. str большинство людей расшифровывают, как string, но тут числа
    otv - сокращение + транслит.
    Ну и парсинг чисел в апдейте - это жирноватая операция.

    PPS: вероятно, вам нужно это:

    Валидация - сюда можно ввести код, который не позволит пользователю вводит не-числа:
    https://docs.unity3d.com/ru/530/ScriptReference/UI...

    Событие ввода - чтобы не проверять текст каждый кадр:
    https://docs.unity3d.com/ru/530/ScriptReference/UI...

    Не забывайте про документацию - в ней хорошо описаны самые нужные моменты.
    Ответ написан
    Комментировать
  • Как вызвать метод на блейзор клиенте?

    Ошибка говорит, что HttpClient в блазоре не поддерживает Proxy
    А в коде вашей либы есть такой код
    public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
            {
                BaseUrl = baseUrl;
                Serializer = serializer;
                DefaultQueryString = new List<KeyValuePair<string, string>>();
    
                MaxRetryCount = 0;
                Proxy = proxy;
    
                HttpClient = new HttpClient(new HttpClientHandler
                {
                    Proxy = proxy // Вот из-за этой строчки происходит падение.
                });
            }


    Есть три варианта решения:
    1. Сделать форк либы и поправить эту строку.
    Но не факт, что это единственная строчка, которая вызывает несовместимые API
    2. Вызывать этот код на сервере, а клиенту передавать только данные.
    3. Написать собственный клиент для imdb
    Ответ написан
    Комментировать
  • Нужно ли вызывать Dispose у Bitmap?

    Dispose нужно вызывать всегда, когда вы прекращаете пользоваться ресурсом.
    В вашем случае битмапом владеет Holder, по тому Holder нужно сделать IDisposable и вызывать Dispose на нём при завершении работы программы.
    Если жизненным циклом битмапа управляет не Holder, то Holder не нужно делать IDisposable, но перед тем как избавиться от Bitmap - на нём надо вызвать Dispose, иначе произойдёт утечка памяти или ещё чего (не уверен, что там внутри битмапа хранится и какие там ограничения)
    Ответ написан
    3 комментария
  • Произошла проблема в Unity, поможете?

    У объекта класса RigidBody нет поля velosity - об этом тебе Unity говорит.
    Идём в документацию и видим, что есть поле velocity - ты опечатался.

    Раз у тебя возникают трудности в таких моментах, от забудь про существование юнити и займись просто C#-ом
    Ответ написан
    Комментировать