Задать вопрос
Ответы пользователя по тегу C#
  • Как передать List в c#?

    в с# нет map, а есть словари. но если я делаю attribureValues словарем (ключ-значение), то выходит ошибка:
    невозможно преобразовать тип dictionary в тип mapEntryStringString.

    А с чего вы взяли, что нужно туда пихать Dictionary, если там написано mapEntryStringString?
    Просто пишите new mapEntryStringString() и пихайте туда все параметры нужные.
    Скорее всего, там просто список из пар ключ-значение.
    Ответ написан
    Комментировать
  • Во время Rest запроса появляются символы?

    string UTCg = UTC[0].Replace(":","%3A");
    Просто убери эту и другие строки, где руками происходит экранирование.
    При отправке запроса, http-клиент сам всё экранирует как надо.
    Ответ написан
    Комментировать
  • Поместить данные из массива в строку?

    Object reference not set to an instance of an object

    Где-то возник null.
    Ответ написан
    Комментировать
  • Как правильно разделить строки?

    Сложно сказать, откуда берётся NRE, тк код хоть и страшный, но рабочий.
    Ошибка может возникать, если OFD, OFD.FileName, logins или pass равен null.

    Небольшой совет, как можно улучшить код:
    1. Делаем отдельный тип для пары логин-пароль, и используем для этого один список
    2. Читаем файл не целиком, а построчно.
    var path = "...";
    var lines = await File.ReadAllLinesAsync(path);
    var allCredentials = lines.Select(Credentials.Parse).ToList();
    
    public record Credentials(string Username, string Password) {
      public static Credentials Parse(string line) {
          var parts = line.Split(':');
          return new(parts[0], parts[1]);
      }
    }
    Ответ написан
    Комментировать
  • Как правильно задать Bitmap.UriSource для Image.Source?

    1. UriSource принимает путь относительно рабочей директории, а не абсолютный путь
    2. Разделитель - обычный слеш (/), а не обратный (\)
    Но мне нужно, что бы путь ссылался на уже скомпилированную директорию

    Просто выставьте в свойствах к картинке, чтобы она копировалась в скомпилированную директорию.

    https://docs.microsoft.com/en-us/dotnet/api/system...
    Ответ написан
  • Почему появляется ошибка?

    Потому что нет перегрузки, которая принимает string[] и int32
    https://docs.microsoft.com/en-us/dotnet/api/system...

    Но зато есть перегрузка, которая принимает string[], int32, StringSplitOptions
    var a = "TOM";
    var parts = a.Split(new [] { "O" }, 2, StringSplitOptions.None);
    Ответ написан
    Комментировать
  • Как передать значения?

    Используй поля
    Ответ написан
    Комментировать
  • Как скомпилировать проект на C# в один .exe файл?

    Single File Application - фича современных дотнетов со времён .net Core 3
    Буквально при помощи одной опции в файле проекта или одной строкой в консоли собирает ваш проект в единый екзешник, в который ещё может быть опционально встроен рантайм.
    Вот пример csproj:
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
      <PropertyGroup>
        <!-- Вот это самое главное -->
        <PublishSingleFile>true</PublishSingleFile>
        <!-- Это чтобы тащить за собой рантайм До .NET 6 будут рядом лежать нативные библиотеки jit-а и сборщика мусора-->
        <SelfContained>true</SelfContained>
        <!-- Это необходимо, чтобы сборщик понимал, для какой ОС нужен экзешник -->
        <RuntimeIdentifier>win-x64</RuntimeIdentifier>
        <!-- Это чтобы ускорить запуск -->
        <PublishReadyToRun>true</PublishReadyToRun>
        <!-- Эти две строки, чтобы уменьшить размер бинарника -->
        <PublishTrimmed>true</PublishTrimmed>
        <TrimMode>link</TrimMode>
      </PropertyGroup>
    </Project>

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

    Для старых версий дотнета есть ILMerge и Costura.Fody, но в .net 5+ они не нужны, и я крайне советую использовать именно .NET 8, тк он сейчас самый актуальный
    Ответ написан
  • Как сделать список ключ-значение в C#?

    Ну в общем , в пайтоне есть такие списки когда ты делаешь название элемента списка (например "имя") и напротив него через : что то для этого элемента (например "Егор")

    Если не ошибаюсь, в пайтоне это называется Словарь/dict/dictionary, но синтаксис немного не такой, какой вы показали.

    В C# это тоже называется Dictionary
    using System.Collections.Generic;
    //...
    var skinPrices = new Dictionary<string, int> {
      ["Очень редкий скин"] = 100500
      ["Очень не редкий скин"] = 1
    };
    Ответ написан
    Комментировать
  • Как десериализовать Json в объект?

    #r "nuget:Newtonsoft.Json/13.0.1"
    
    using Newtonsoft.Json;
    
    var json = @"
    {
        ""success"": 1,
        ""result"": {
            ""total"": 3,
            ""limit"": 0,
            ""offset"": null,
            ""stocks"": [
                {
                    ""номенклатураGUID"": ""GUID"",
                    ""складGUID"": ""GUID"",
                    ""назначениеGUID"": ""GUID"",
                    ""остаток"": 1,
                    ""rn"": 1
                },
                {
                    ""номенклатураGUID"": ""GUID"",
                    ""складGUID"": ""GUID"",
                    ""назначениеGUID"": ""GUID"",
                    ""остаток"": 65,
                    ""rn"": 2
                },
                {
                    ""номенклатураGUID"": ""GUID"",
                    ""складGUID"": ""GUID"",
                    ""назначениеGUID"": ""GUID"",
                    ""остаток"": 13,
                    ""rn"": 3
                }
            ]
        }
    }
    ";
    // Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse); 
        public class Stock
        {
            [JsonProperty("номенклатураGUID")]
            public string НоменклатураGUID { get; set; }
    
            [JsonProperty("складGUID")]
            public string СкладGUID { get; set; }
    
            [JsonProperty("назначениеGUID")]
            public string НазначениеGUID { get; set; }
    
            [JsonProperty("остаток")]
            public int Остаток { get; set; }
    
            [JsonProperty("rn")]
            public int Rn { get; set; }
        }
    
        public class Result
        {
            [JsonProperty("total")]
            public int Total { get; set; }
    
            [JsonProperty("limit")]
            public int Limit { get; set; }
    
            [JsonProperty("offset")]
            public object Offset { get; set; }
    
            [JsonProperty("stocks")]
            public List<Stock> Stocks { get; set; } //Вот тут у вас просто Stock
        }
    
        public class Root
        {
            [JsonProperty("success")]
            public int Success { get; set; }
    
            [JsonProperty("result")]
            public Result Result { get; set; }
        }
    
    var result = JsonConvert.DeserializeObject<Root>(json);

    Буквально после кодогенератора всё ок работает.
    Ответ написан
    Комментировать
  • Как создать Bitmap большого размера в C#?

    Ну во-первых точно не получится использовать стандартный Bitmap.
    Хранить в куче такой большой объект тоже не следует, тк он 100% попадёт в LOH
    + в .NET есть ограничение в 2гб на объекты в управляемой куче.
    Описанное вами изображение как раз в этот лимит и не влезет.

    Остаётся два с половиной варианта:
    1. Делить огромное изображение на чанки по меньше (либо по пикселям, либо по каналам, либо и так и так)
    2. Хранить изображение в неуправляемой памяти, выделять и освобождать память вручную.
    В .net 6 как раз добавили Native alloc API для этого.
    3. Возможно есть какая-нибудь нативная библиотека для работы с большими изображениями.
    Возможно даже уже есть обёртка для работы с ней.

    Во всех случаях придётся отказаться от Bitmap и использовать другие подходы
    без доп. библиотек и массива битмапов

    Не получится
    Ответ написан
    9 комментариев
  • Как указать класс в c#?

    Вы компилируете единственный файл.
    Советую поставить .NET SDK и создать через него проект при помощи dotnet new console.
    612e4e667faf5150731479.png

    csc не следует использовать напрямую
    Ответ написан
    Комментировать
  • Какие задачи по паттернам проектирования на C# вы можете посоветовать?

    У контура есть не самый новый, но достаточно объёмный курс по паттернам на практике:
    https://ulearn.me/Course/CS2/Vvedenie_7df81bac-f52...
    Ответ написан
    Комментировать
  • Сложение элементов массива?

    При этом число с индексом 2 не учитывается в сумме, а 4 учитывается

    Тоесть с 3 до 4 включительно.
    var numbers = [1,-3,5,-6,-10,13,4,-8];
    var sum = numbers[3..4].Sum();
    Ответ написан
    Комментировать
  • C#. Поиск байтовых ключей в словаре. Что я делаю не так?

    Вот пара вариантов:
    1. Преобразовывать массив в base64 строку и использовать её как ключ
    2. Если размер фиксировано 5 - можно использовать (byte, byte, byte, byte ,byte) (кортеж из пяти байтов)
    3. Раз уж размер всего 5 байт, то можно сделать структуру-обёртку (в которой будет 5 байтовых полей)
    4. Можно хранить байты в int64
    5. Можно считать хэш от байтового массива и использовать хэш как ключ.
    6. В принципе можно сделать обёртку над массивом с кастомным Equals и GetHashCode.
    Ответ написан
    Комментировать
  • Правильно в enum писать капсом?

    У кого правильно? Почему надо капсом писать? Во всех случаях?

    В C# принято всегда писать члены перечислений в PascalCase
    Тоесть твой вариант считается корректным

    https://docs.microsoft.com/en-us/dotnet/csharp/fun...

    В принципе никто не запрещает использовать другую конвенцию, но её следует зафиксировать при помощи .editorconfig
    Ответ написан
    Комментировать
  • Можно ли записать в одну строку?

    можно написать так:
    if(ui is UI {leader: { IsValid: true, Owner: var leaderOwner},  b_leader_is_dead: false, } )
    {
     // делаем что-то с владельцем лидера
    }

    Но я хз доступен ли паттерн матчинг в Unity
    Ответ написан
  • Как перевести программу написанную на c# на android?

    Если бы не селениум, то можно было бы попытаться переиспользовать код при помощи xamarin.
    Интерфейс в любом случае придётся делать заново.
    Селениум на андроиде не заведётся.
    Ответ написан
    Комментировать
  • Invalid token return и так же invalid token; что делать?

    1. Отложи юнити на полку
    2. установи Visual Studio Community
    3. Изучай C#, пока сообщения об ошибках не станут понятными.
    4. Достань юнити с полки
    5. Настрой юнити так, чтобы можно было писать код в студии, а не в блокноте или встроенном редакторе.

    Удали строчку, где написано
    return transform.rotation;
    Её там быть не должно.
    return можно писать только внутри методов
    Ответ написан
    1 комментарий
  • C#. Можно ли создать метод, в котором возвращаемый тип будет определятся в самом методе?

    Возвращаемый тип будет зависеть от того, что придёт в ответе от АПИ (несколько вариантов типов, которые будут явно указаны в самом методе).

    Просто сделай класс, в котором будет какой-нибудь флаг, который сообщает о типе контента и N свойств для каждого типа.
    Если у тебя только два типа - результат и ошибка, то используй Either
    https://habr.com/ru/post/267231/
    Ответ написан
    Комментировать