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

    Выбирать рандомом, да.
    А чтобы они не перемешивались - разделяй на несколько файлов или ещё как-то
    Ответ написан
    3 комментария
  • Что показывает .NET Reflector?

    1. Нет особо смысла использовать Reflector в 2021 году, тк есть и бесплатные альтернативы - например dotPeek или sharplab. В том же райдере, например, тоже есть кнопка, чтобы сразу показать IL.
    Студия уже умеет из коробки декомпилировать чужой код.
    2.
    В тоже время в С++ шаблоны "размножаются" в коде.

    В .NET женерики тоже размножаются в коде, но только для value-типов и только после JIT-компиляции.
    Ответ написан
    Комментировать
  • Есть ли смысл изучать ASP.NET?

    Есть ли смысл изучать его ради маленьких в пару страниц сайтов (но всё же серверным функционалом, не просто "отдать html по ссылке")?

    Для продакшена - да. HttpListener даже на линуксе вроде не будет работать, тк зависит от http.sys

    Какие у него есть киллер-фичи, облегчающие жизнь?

    1. Быстрый
    2. Гибкий
    По сравнению с httplistener.
    я слегка пересрался от вида "пустого проекта asp net" в visual studio.

    Ну там он действительно немного страшный, в .NET 6 его сделают чуть менее страшным.
    Вообще минимальный проект выглядит примерно так:
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHost(webBuilder =>
        {
            webBuilder.UseKestrel(o =>
            {
                o.ListenLocalhost(5000);
            });
            webBuilder.ConfigureServices(services =>
            {
                services.AddRouting();
            });
            webBuilder.Configure(app =>
            {
                app.UseRouting();
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapGet("/", async context =>
                    {
                        await context.Response.WriteAsync("Hello World!");
                    });
                });
            });
        })
        .Build()
        .Run();

    В .NET 6 будет MinApi, который выглядит вот так (без юзингов):
    var app = WebApplication.Create(args);
    
    app.MapGet("/", string () => "Hello World!");
    
    app.Run();
    Ответ написан
    Комментировать
  • Как десериализовать пустой массив Guid используя Newtonsoft deserializer?

    Какую версию Newtonsoft используешь?
    На .NET 5 и Newtonsoft.Json/13.0.1 всё ок.
    #r "nuget:Newtonsoft.Json/13.0.1"
    var guids = Newtonsoft.Json.JsonConvert.DeserializeObject<Guid[]>("[]").Dump();
    var guids2 = System.Text.Json.JsonSerializer.Deserialize<Guid[]>("[]").Dump();

    + Зачем использовать newtonsoft, когда есть STJ?
    Ответ написан
  • Как сделать enum или что-то подобное со структурой?

    Никак. В будущем, возможно, появятся Discriminated Union, как в F#.
    Сейчас это можно решить через static
    Например как-то так:
    public static class Rarity {
      public static Color Rare {get;} = new Color(255,255,255)
    }

    Если хочется, чтобы Rarity был как самостоятельный тип, то можно использовать наследование.
    Ответ написан
    2 комментария
  • Почему игнорируется объемный фрагмент кода после выполнения httpClient.GetStreamAsync()?

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

    1. Это особенность async-await. Перескакивание при отладке - это норма.
    2. Не используй async void
    3. Попробуй завернуть всё внутри метода с await-ами в try-catch, чтобы убедиться, что выход происходит не из-за исключений. Заодно выводи в консоль сообщения об ошибках.
    4.
    File.OpenWrite(PathForSavePhotos + "/" + dataExcelTabel[i].codeProduct + "." + splitFileName[splitFileName.Length - 1]);

    Выглядит очень подозрительно. На самом деле может падать из-за кривых разделителей пути. Используй Path.Combine
    5. Вместо .Close(); используй using

    PS: не надо дублировать вопросы
    Ответ написан
  • Десериализация с System.text.json. Не получается распарсить сложный json ответ с API?

    1. Пропустил скобочки:
    Вот такой json должен быть

    {
      "status": {
        "timestamp": "2021-06-28T05:54:55.250Z",
        "error_code": 0,
        "elapsed": 28,
        "credit_count": 1,
        "total_count": 5475
      },
      "data": [
        {
          "id": 1,
          "name": "Bitcoin",
          "symbol": "BTC",
          "slug": "bitcoin",
          "num_market_pairs": 9210,
          "date_added": "2013-04-28T00:00:00.000Z",
          "tags": [
            "mineable",
            "pow",
            "sha-256",
            "store-of-value",
            "state-channels",
            "coinbase-ventures-portfolio",
            "three-arrows-capital-portfolio",
            "polychain-capital-portfolio",
            "binance-labs-portfolio",
            "arrington-xrp-capital",
            "blockchain-capital-portfolio",
            "boostvc-portfolio",
            "cms-holdings-portfolio",
            "dcg-portfolio",
            "dragonfly-capital-portfolio",
            "electric-capital-portfolio",
            "fabric-ventures-portfolio",
            "framework-ventures",
            "galaxy-digital-portfolio",
            "huobi-capital",
            "alameda-research-portfolio",
            "a16z-portfolio",
            "1confirmation-portfolio",
            "winklevoss-capital",
            "usv-portfolio",
            "placeholder-ventures-portfolio",
            "pantera-capital-portfolio",
            "multicoin-capital-portfolio",
            "paradigm-xzy-screener"
          ],
          "max_supply": 21000000,
          "circulating_supply": 18743737,
          "total_supply": 18743737,
          "cmc_rank": 1,
          "last_updated": "2021-06-28T05:54:02.000Z",
          "quote": {
            "USD": {
              "price": 34489.91295375669,
              "volume_24h": 33231566302.9618,
              "percent_change_1h": 0.24623143,
              "percent_change_24h": 4.72866241,
              "percent_change_7d": 0.0385825,
              "percent_change_30d": -6.57806083,
              "percent_change_60d": -36.08177402,
              "percent_change_90d": -40.16259997,
              "market_cap": 646469857558.1086,
              "last_updated": "2021-06-28T05:54:02.000Z"
            }
          }
        },
        {
          "id": 1027,
          "name": "Ethereum",
          "symbol": "ETH",
          "slug": "ethereum",
          "num_market_pairs": 6005,
          "date_added": "2015-08-07T00:00:00.000Z",
          "tags": [
            "mineable",
            "pow",
            "smart-contracts",
            "ethereum",
            "coinbase-ventures-portfolio",
            "three-arrows-capital-portfolio",
            "polychain-capital-portfolio",
            "binance-labs-portfolio",
            "arrington-xrp-capital",
            "blockchain-capital-portfolio",
            "boostvc-portfolio",
            "cms-holdings-portfolio",
            "dcg-portfolio",
            "dragonfly-capital-portfolio",
            "electric-capital-portfolio",
            "fabric-ventures-portfolio",
            "framework-ventures",
            "hashkey-capital-portfolio",
            "kinetic-capital",
            "huobi-capital",
            "alameda-research-portfolio",
            "a16z-portfolio",
            "1confirmation-portfolio",
            "winklevoss-capital",
            "usv-portfolio",
            "placeholder-ventures-portfolio",
            "pantera-capital-portfolio",
            "multicoin-capital-portfolio",
            "paradigm-xzy-screener"
          ],
          "circulating_supply": 116469137.499,
          "total_supply": 116469137.499,
          "cmc_rank": 2,
          "last_updated": "2021-06-28T05:54:02.000Z",
          "quote": {
            "USD": {
              "price": 1972.9974245462824,
              "volume_24h": 19489435867.08539,
              "percent_change_1h": -0.03164063,
              "percent_change_24h": 5.36554092,
              "percent_change_7d": -7.36312666,
              "percent_change_30d": -22.4570674,
              "percent_change_60d": -27.41396336,
              "percent_change_90d": 9.21290472,
              "market_cap": 229793308324.65384,
              "last_updated": "2021-06-28T05:54:02.000Z"
            }
          }
        },
        {
          "id": 825,
          "name": "Tether",
          "symbol": "USDT",
          "slug": "tether",
          "num_market_pairs": 13711,
          "date_added": "2015-02-25T00:00:00.000Z",
          "tags": [
            "payments",
            "stablecoin",
            "stablecoin-asset-backed",
            "solana-ecosystem"
          ],
          "circulating_supply": 62534142511.11169,
          "total_supply": 64471767616.826355,
          "platform": {
            "id": 1027,
            "name": "Ethereum",
            "symbol": "ETH",
            "slug": "ethereum",
            "token_address": "0xdac17f958d2ee523a2206206994597c13d831ec7"
          },
          "cmc_rank": 3,
          "last_updated": "2021-06-28T05:53:08.000Z",
          "quote": {
            "USD": {
              "price": 1.00023604778902,
              "volume_24h": 50665651395.52314,
              "percent_change_1h": -0.00327685,
              "percent_change_24h": -0.11177658,
              "percent_change_7d": -0.14175554,
              "percent_change_30d": -0.07861614,
              "percent_change_60d": 0.01010439,
              "percent_change_90d": -0.01064075,
              "market_cap": 62548903557.1897,
              "last_updated": "2021-06-28T05:53:08.000Z"
            }
          }
        },
        {
          "id": 1839,
          "name": "Binance Coin",
          "symbol": "BNB",
          "slug": "binance-coin",
          "num_market_pairs": 570,
          "date_added": "2017-07-25T00:00:00.000Z",
          "tags": [
            "marketplace",
            "centralized-exchange",
            "payments",
            "binance-smart-chain",
            "alameda-research-portfolio",
            "multicoin-capital-portfolio"
          ]
        }
      ]
    }


    2. После генерации нужно ещё руками подкорректировать классы:
    - Переименовать классы (например Root на Response)
    - Поменять типы (например double на decimal)
    - Дополнить недостающее. (Например Quote заменить на словарь)
    Код

    using System.Text.Json;
    using System.Text.Json.Serialization;
    
    public class Status
    {
        [JsonPropertyName("timestamp")]
        public DateTime Timestamp { get; set; }
    
        [JsonPropertyName("error_code")]
        public int ErrorCode { get; set; }
    
        [JsonPropertyName("elapsed")]
        public int Elapsed { get; set; }
    
        [JsonPropertyName("credit_count")]
        public int CreditCount { get; set; }
    
        [JsonPropertyName("total_count")]
        public int TotalCount { get; set; }
    }
    
    public class QuoteForCurrency
    {
        [JsonPropertyName("price")]
        public decimal Price { get; set; }
    
        [JsonPropertyName("volume_24h")]
        public decimal Volume24h { get; set; }
    
        [JsonPropertyName("percent_change_1h")]
        public decimal PercentChange1h { get; set; }
    
        [JsonPropertyName("percent_change_24h")]
        public decimal PercentChange24h { get; set; }
    
        [JsonPropertyName("percent_change_7d")]
        public decimal PercentChange7d { get; set; }
    
        [JsonPropertyName("percent_change_30d")]
        public decimal PercentChange30d { get; set; }
    
        [JsonPropertyName("percent_change_60d")]
        public decimal PercentChange60d { get; set; }
    
        [JsonPropertyName("percent_change_90d")]
        public decimal PercentChange90d { get; set; }
    
        [JsonPropertyName("market_cap")]
        public decimal MarketCap { get; set; }
    
        [JsonPropertyName("last_updated")]
        public DateTime LastUpdated { get; set; }
    }
    
    public class Platform
    {
        [JsonPropertyName("id")]
        public int Id { get; set; }
    
        [JsonPropertyName("name")]
        public string Name { get; set; }
    
        [JsonPropertyName("symbol")]
        public string Symbol { get; set; }
    
        [JsonPropertyName("slug")]
        public string Slug { get; set; }
    
        [JsonPropertyName("token_address")]
        public string TokenAddress { get; set; }
    }
    
    public class Item
    {
        [JsonPropertyName("id")]
        public int Id { get; set; }
    
        [JsonPropertyName("name")]
        public string Name { get; set; }
    
        [JsonPropertyName("symbol")]
        public string Symbol { get; set; }
    
        [JsonPropertyName("slug")]
        public string Slug { get; set; }
    
        [JsonPropertyName("num_market_pairs")]
        public int NumMarketPairs { get; set; }
    
        [JsonPropertyName("date_added")]
        public DateTime DateAdded { get; set; }
    
        [JsonPropertyName("tags")]
        public List<string> Tags { get; set; }
    
        [JsonPropertyName("max_supply")]
        public int MaxSupply { get; set; }
    
        [JsonPropertyName("circulating_supply")]
        public decimal CirculatingSupply { get; set; }
    
        [JsonPropertyName("total_supply")]
        public decimal TotalSupply { get; set; }
    
        [JsonPropertyName("cmc_rank")]
        public int CmcRank { get; set; }
    
        [JsonPropertyName("last_updated")]
        public DateTime LastUpdated { get; set; }
    
        [JsonPropertyName("quote")]
        public Dictionary<string, QuoteForCurrency> Quote { get; set; }
    
        [JsonPropertyName("platform")]
        public Platform Platform { get; set; }
    }
    
    public class Response
    {
        [JsonPropertyName("status")]
        public Status Status { get; set; }
    
        [JsonPropertyName("data")]
        public List<Item> Data { get; set; }
    }


    3. Тогда чтобы спарсить ответ надо будет просто написать код:
    var json = "{}"; // тут твой ответ json из ответа
    var responseData = JsonSerializer.Deserialize<Response>(json);
    Ответ написан
  • Error CS1061 unity как исправить ошибку?

    В классе Inventory нет публичного поля или свойства с именем slots.
    Как исправить - добавить такое поле, либо поправить код где происходит обращение к нему.
    Ответ написан
    5 комментариев
  • Можно ли использовать "async ValueTask" в Unity?

    В юнити нельзя, тк ValueTask - это слишком новая фича.
    Но скорее всего он вам не нужен
    Ответ написан
    2 комментария
  • Как правильно унаследоваться от обобщенного класса без ошибки компилятора?

    какая претензия у компилятора?

    У него нет публичного конструктора без параметров.
    Но вообще не советую использовать ограничение new(), тк оно очень сильно замедляет код.
    Ответ написан
  • Можно ли писать Android приложения на c#?

    Можно писать на Xamarin, но если у тебя в шарпе опыта нема и не нужно переиспользовать шарповый код на телефонах, то лучше посмотри в сторону flutter
    Ответ написан
    Комментировать
  • Как из потока добавить строки в листбокс?

    В чем разница между MainWindow.xaml.cs и App.xaml.cs? Может я ещё и не туда пишу код?

    MainWindow - это про главное окно. App - это про приложение в целом.

    Как из потока добавить строки в листбокс?

    Из другого потока нельзя добавлять, тк к UI-элементам можно обращаться только из UI-потока.
    Для нестатического поля, метода или свойства "MainWindow.ListBox1" требуется ссылка на объект.

    Ну да, нельзя. Нужно передавать экземпляр окна.
    Например так:
    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
        
    // Поиск в потоке
    Thread thread1 = new Thread(()=>InstalledPrograms.FindPrograms(this));
    thread1.Start(); // Запуск потока.
    }
    }
    
    static class InstalledPrograms
    {
    public static void FindPrograms(MainWindow mainWindow)
    {
    // Тут позже будет код поиска программ.
    
    //Ошибка - Для нестатического поля, метода или свойства "MainWindow.ListBox1" требуется ссылка на объект.
    mainWindow.ListBox1.Items.Add("Путь к программе");
    }
    }
    Ответ написан
    5 комментариев
  • Как правильно распарсить страницу. C#?

    Чтобы делать запросы внутри iframe, надо сначала найти нужный iframe, а потом переключиться внутрь него при помощи IWebDriver.SwitchTo
    Ответ написан
  • Как можно сократить код?

    Сократить код не получится, тк он и так очень компактный
    Номер страницы и размер страницы в PageInfo есть смысл контролировать снаружи, например в конструкторе или свойствах PageInfo
    Offset и Limit имеет смысл вынести наружу - в екстеншены или в методы PageInfo
    public async Task<IList<WishlistItemDto>> GetAllAsync(PageInfo pageInfo)
            {
                var items = await _wishListItemRepository.GetAllAsync(pageInfo.Offset(), pageInfo.Limit());
                return _mapper.Map<IList<WishlistItemDto>>(items).Reverse().ToList();
            }
    Ответ написан
  • Как сузить консольное приложение?

    Как сузить консольное приложение?

    Что имеется в виду?
    получается не очень

    Как получается? Не все будут запускать код чтобы проверить.

    Вообще консольное приложение не имеет окна, на то оно и консольное.
    По тому ты никак не сможешь изменить размер окна терминала.
    Ответ написан