Ответы пользователя по тегу C#
  • Есть ли какие-нибудь тестовые задания на многопоточность и асинхронность, C#/ASP.NET?

    Jeer
    @Jeer
    уверенный пользователь
    Привет, ничего себе тут советы, Рихтера читать )
    По асинхронности я удивлён, что появились сложности. Сейчас весь с#, все его туториалы переходят на асинхронность в принципе. async/await можно использовать, даже не понимая, как это работает. А чтобы разобраться, достаточно прочитать пару статей.
    Я рекомендую маленькую карманную книжку, она читается буквально за несколько часов и прям абсолютно всё становится ясно по асинхронности,
    Приведу ссылку на озон, но можно найти и бесплатные варианты Асинхронное программирование в C# 5.0
    По многопоточности сложнее, в том плане, что она крайне редко используется в обычном REST api. Мне даже интересно, какие вопросы задают про многопоточность и что будет, если в ответ спросить "а у вас на проекте это используется или вы просто теорией интересуетесь?"
    Ответ написан
  • Как протащить изображение через SignalR?

    Jeer
    @Jeer Автор вопроса
    уверенный пользователь
    Кому интересно, тут произошла какая-то магия. Дело в том, что когда из c# отправляется массив байтов он автоматически конвертируется в base64 стрингу. Мне понадобилось некоторое время, чтобы осознать это. Причин такого поведения я не нашёл в интернете, буду рад, если кто подскажет.
    В моём коде я по сути делал двойную конвертацию в base64, это всё не нужно, вот верный код:
    this.connection.on("BroadCastImage", image => {
          this.base64data = this.sanitizer.bypassSecurityTrustUrl('data:image/jpeg;base64,' + image);
        });
    Ответ написан
    1 комментарий
  • Как сделать синхронизацию?

    Jeer
    @Jeer
    уверенный пользователь
    Не знаю, существует ли какая-то серебряная пуля в синхронизации данных, думаю, что всё довольно индивидуально в зависимости от проекта.
    Ваша идея вполне жизнеспособна, реализовывайте.
    От себя могу добавить, что не нужно первоначальные данные грузить через SignalR, его можно использовать лишь для обновления данных.
    Например, действительно ли приложению нужно сразу знать весь список пользователей? Да и нужен ли вообще целый список? В любом случае, когда уже пользователи есть, при добавлении/обновлении какого-то из пользователей можно через SignalR отправлять на все клиенты не только уведомление, но и все данные по пользователю сразу. Конечно, если нет массового обновления всех пользователей, тогда этот вариант не прокатит.
    В общем, всё сугубо индивидуально
    Ответ написан
  • ASP.NET как узнать какой JS-скрипт исполняется сейчас?

    Jeer
    @Jeer
    уверенный пользователь
    можете написать слово debugger в js в том месте, где хотите точку останова. Тогда при включенных тулзах (f12 в хроме) выполнение будет автоматически остановлено на этой строчке. Ничего искать не надо.
    Вообще, ваш вопрос не относится к asp.net, только к студии.
    Есть еще разные штуки, например, можно нажать на функцию правой кнопкой и "найти все ссылки", но в студии это работает только для js файлов, не ищет, если вызов из html.
    В целом, попробуйте перейти на ангуляр/реакт. Как поймёте структуру, все ваши функции будут находиться в одном месте, не надо будет ничего искать.
    Работа с js/html лучше реализована в PHPStorm, чем в вижуал студии, сейчас я пишу бекенд на .net в VS, а фронтовую часть в шторме (ангуляровский проект)
    Ответ написан
    Комментировать
  • Как функционально программировать для параллельных вычислений на C#?

    Jeer
    @Jeer
    уверенный пользователь
    Привет!
    Первое, .net языки транслируются в промежуточный язык (IL) при компиляции. То, что можно написать на F#, можно так же написать на C#, разницы не будет никакой. F# выбирают лишь из-за синтаксиса (кому он нравится).
    То есть на F# вы будете писать в функциональном стиле, но это не даст никаких преимуществ перед c#. Lisp и F# так же некорректно сравнивать, у них разные компиляторы и разные механизмы обработки. Если есть желание, попробуйте функциональные языки, вроде lisp. Утверждение, что за ним будущее, спорное. В энтерпрайзе применяют c# и java. И будут применять в будущем.
    Второе. Для параллельных вычислений не обязательно писать на функциональных языках. Параллельные вычисления не сложно делать и на c#, но, как уже сказали, далеко не все операции можно распараллелить, это не зависит от языка. А иногда этим и не нужно заниматься. Например, веб программирование. Сервер имеет свои механизмы распараллеливания, он обрабатывает одновременно много различных запросов от пользователей. При этом со стороны программиста не нужно писать что-либо, касаемое параллельности.
    Запрос от пользователя - валидация данных - запрос в базу - упаковка ответа - возврат ответа. Чисто теоретически можно распараллелить отдельно взятый шаг, но зачем? Не факт, что это прибавит производительности.

    Для информации, вы спрашивали, посмотрите лямда-вычисления на c#
    Ответ написан
    Комментировать
  • Какие преимущества у C# и недостатки перед JS (Electron, NW.JS) для дескстопных приложений?

    Jeer
    @Jeer
    уверенный пользователь
    JS код всегда запускается в какой-то обёртке, которая позволяет выполняться этому коду на платформе. По сути, этот код может работать только с теми методами, которые отдаёт обёртка, то есть, с каким-то функционалом js код в принципе не сможет работать. Второе, так как вызовы идут через эту прослойку, всё работает медленнее. И может выдавать иногда неожиданные результаты.
    Когда вы пишете на компилируемых языках (например, c#), то вы обращаетесь напрямую к используемой системе, можете работать без ограничений и без неожиданных результатов (и быстрее)
    Ответ написан
  • Как в Entity framework динамически изменять критерий для выборки?

    Jeer
    @Jeer
    уверенный пользователь
    Вы немношк запутались )
    Когда вы выполняете строку
    var loadDb = db.Events.Where(l => l.cabinet == targetId.ToString());

    У вас нет запроса к базе. В этой строке создается лишь сам запрос, то есть формируется sql код на основе вашего запроса. Он никуда в базу не отправляется. И присваивается в переменную loadDb
    Далее, когда вы делаете, например,
    case "G": loadDb = db.Events.Where(l => l.group == targetId.ToString()); break;

    Вы в переменную loadDb записываете другой сформированный запрос. Вы просто перезаписываете переменную. Запросов к базе в таком случае так же не поступает.
    Отвечая на ваш вопрос, скорее всего, вы хотите на один запрос наложить дополнительное условие. В вашем коде это будет выглядеть примерно так:
    var loadDb = db.Events.Where(l => l.cabinet == targetId.ToString());
                switch (targetType)
                {
                    case "G": loadDb = loadDb.Where(l => l.group == targetId.ToString()); break;
    ...


    А само выполнение запроса к базе происходит, когда вы вызываете методы, отдающие результат, например
    var res = loadDb.ToList()
    Ответ написан
    3 комментария
  • Почему не работает AddTransient() в ASP.NET CORE 2.0?

    Jeer
    @Jeer
    уверенный пользователь
    Привет, разобрались? На взгляд всё должно работать, где была ошибка?
    Ответ написан
  • Доступен ли c# на Raspberry Pi и Orange Pi?

    Jeer
    @Jeer
    уверенный пользователь
    Пару лет прошло, как успехи? ) .net core шагнул вперёд, на нём можно под линукс писать (теоретически)
    Ответ написан
    Комментировать
  • Жив ли еще wcf?

    Jeer
    @Jeer
    уверенный пользователь
    Меня вообще напугал этот вопрос. Самая отличная архитектура для веб приложения - soa (сервис ориентированная), строилась именно с использованием wcf. Использовать web api для этих целей мне жутко не понравилось, может быть, я как-то не правильно его готовлю, но, лично мне не удобно.
    Когда стал писать под .net core, то выяснилось, что для того, чтобы подключить wcf, необходимо установить стороннее расширение для visual studio. Но вот недавно переустанавливал систему, выкачал последние версии всего, что только можно, и я больше не нашел это расширение. Теперь я просто не знаю, как подключить wcf в .net core проектах :)
    SignalR тут советуют, пойду почитаю
    Ответ написан
    Комментировать
  • Как прочитать участок текста из файла?

    Jeer
    @Jeer
    уверенный пользователь
    Для начала считайте файл в тектовую переменную.
    Затем, из этой переменной можете отрезать лишнее, пользуясь методами
    Substring и IndexOf
    Ответ написан
    2 комментария
  • Преобразование string в int с игонорированием символов без лишних телодвижений?

    Jeer
    @Jeer
    уверенный пользователь
    Могу предложить методы расширения )
    https://metanit.com/sharp/tutorial/3.18.php

    public static class StringExtension
    {
        public static int atoi(this string str)
        {
            return int.Parse(str.Substring(1));
        }
    }


    Вызывать в любом месте,
    var C_formula = "C10";
    var res = C_formula.atoi();
    Ответ написан
    5 комментариев
  • Как использовать мой язык из c#?

    Jeer
    @Jeer
    уверенный пользователь
    есть книга, "выразительный яваскрипт", кажется. Там описывается как сделать свой интерпретатор, но. Это для яваскрипта. Как такое провернуть на c#, я не знаю.
    Ответ написан
    Комментировать
  • Номера ошибок. Требуется однократно указать номер ошибки в коде. Есть хорошая практика?

    Jeer
    @Jeer
    уверенный пользователь
    Возвращать кастомные номера ошибок в принципе плохая практика.
    Если у вас большой список параметров, то оборачивайте их в класс данных, dto.
    Далее, вам нужна валидация. Из коробки доступна схема работы с ModelState - это когда в декларативном стиле описываются правила и на выходе есть метод isValid - валидна ли модель и весь список ошибок, если не валидна. Для зависимых полей приходится писать кастомные классы-валидаторы, это не всегда удобно, но можно писать правила любой сложности.
    Второй вариант, это вы подключаете fluent validation, и во внешних классах описываете все правила. Как по мне, у них сложноватый синтаксис, поначалу немного пугающий, но в целом всё отлично работает.
    Ответ написан
    8 комментариев
  • Верхний левый угол изображения c#?

    Jeer
    @Jeer
    уверенный пользователь
    Ноль ноль вроде, чего их получать
    Ответ написан
    Комментировать
  • Как посчитать количество дочерних объектов?

    Jeer
    @Jeer
    уверенный пользователь
    Привет, можешь показать код?
    Если у тебя объект класса и тебе нужно посчитать количество полей, то необходимо использовать рефлексию (но что-то в голову не приходит, зачем это нужно)
    Если у тебя массивы или списки, то существуют методы работы с ними, либо можно использовать linq.
    Ответ написан
    Комментировать
  • Как стать .net middle, с уклоном в веб?

    Jeer
    @Jeer
    уверенный пользователь
    Рост в проф. плане очень зависит от окружения. Банальная смена работы даст вам новых задач, с которыми вы ранее не сталкивались. При устройстве на работу обращайте внимание (задавайте вопросы на собеседовании) в первую очередь какой размер команды и внедрена ли практика код ревью. Внедрен ли code style. Возможность смотреть за работой более опытных разработчиков и возможность им указывать вам на ваши ошибки даёт просто гипер прирост профессионального опыта.
    Ответ написан
    Комментировать
  • Как передать значение последнего добавленного id в другую таблицу?

    Jeer
    @Jeer
    уверенный пользователь
    Если ты работаешь через Entity Framework, то вначале добавляешь первую сущность в базу, жмешь сохранить изменения и у тебя в этой сущности изменяется айдишник на созданный в базе, который далее используешь. Это самый топорный вариант. Так же работает, если ты добавляешь вторую сущность в связь с первой, должно корректно создаться.

    Если тебя интересует именно sql код, который ты вызываешь из ADO (когда отправляешь команду типа string из кода c#), либо пишешь хранимую процедуру в sql с кодом и вызываешь хранимку так же через ADO.net, то тебе нужно что-то типа такого:

    string queryString =
                            String.Format(@"
                            insert into UserProfile (vk_id, DialogQuestId, UserName,Race, access_token) values ({0}, 1 ,N'{1}',{2}, '{3}') 
                            SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]"
                            , vk_id, name, race, access_token);
    
                var dt = await GetDataAsync(queryString);
                if (dt == null || dt.Rows.Count == 0) return 0;
                int id = int.Parse(dt.Rows[0]["SCOPE_IDENTITY"].ToString());
                await SetDataAsync($"insert into UserMoney (UserId, Cr) values ({id},50)");


    GetDataAsync и SetDataAsync - работа через ADO.net, вынесенная в отдельные функции
    var result = new DataTable();
    using (var connection = new SqlConnection(myConnString))
                    using (var command = new SqlCommand(query, connection))
                    {
                        await command.Connection.OpenAsync().ConfigureAwait(false);
                        var da = new SqlDataAdapter(command);
                        da.Fill(result);
                    }
    return result;


    Код немного корявый, но, думаю, выдернешь что тебе нужно
    Ответ написан
    Комментировать
  • Как подружить C# и Java?

    Jeer
    @Jeer
    уверенный пользователь
    Поднимаете на c# wcf сервис, на java вызываете нужные методы сервиса и вуаля
    Ответ написан
    Комментировать
  • Как развиваться .NET разработчику?

    Jeer
    @Jeer
    уверенный пользователь
    Для фулл стека в принципе должно хватать и разнообразия и чего читать/учить обычно вопросов не встаёт, всегда есть белые пятна. Как по мне, смена работы даёт максимальный прирост профессионального развития. Перейдите в другой проект и сразу найдутся ваши пробелы и закроется вопрос что читать и что учить.
    Ответ написан
    Комментировать