Ответы пользователя по тегу C#
  • Как мне с IDataReader привести к int?

    @kttotto
    все, что .NET
    Во первых, у Вас неверный запрос, должно бытьSelect Count(*) From ...
    Во вторых, агрегирующая функция (та, которая возвращает только одно значение, а не кортеж) читается другим методом, conn.ExecuteScalar(...);
    Результат должен вернуть тип object, который Вы и приводите к int.
    Ответ написан
  • Какой способ подключения к БД на C# правильный?

    @kttotto
    все, что .NET
    Все, что выполняет поставленную задачу - правильно. Все, что позволяет потом поддерживать и масштабировать код - еще правильней.

    В бизнес проектах через конструктор никто, конечно, код для бд не пишет. Чаще всего для мапинга с бд используют какую-нибудь ORM (EF, Dapper), руками пишут модели, которые потом будут мапиться на таблицы бд, прописывают их связи.
    Ответ написан
  • Что должно быть входным параметром метода C#?

    @kttotto
    все, что .NET
    Возможно надо убрать все, что не цифра ли все точки и получится "123"
    Ответ написан
  • Почему не могу найти работу Junior'ом C#?

    @kttotto
    все, что .NET
    Это не резюме, это набор слов, ничем Вас не выделяет из общей массы и даже делает низовым в списке общей массы.

    1. Такой кучи тегов даже у меня нет)) Если Вы знаете названия технологий, не говорит о том, что Вы знаете сами технологии. С Вашим опытом никто не поверит, что Вы имели реальный опыт со всем этим, а не просто hello world написали. Выберите те, в которых по Вашему мнению Вы лучше всего разбираетесь.

    2.
    Отличное знание WinForms, ASP.NET, LINQ и WPF. Паттерны: MVVM, MVP, Repository, IoC.

    Для третьекурсника звучит самонадеяно. При такой формулировке на техническом собеседовании будут проверять "отличное" знание и я почти уверен, что Вы его провалите. Лучше сказать что-то подобие: имел опыт работы с, для реализации использовал технологии, имею <начальные> навыки работы с и т.д.

    3.
    Занимался исправлением мелких багов, написанием небольших SQL-запросов и unit-тестов, решал небольшие задачи.

    Этим занимаются все разработчики, даже мидлы с сеньорами. Из Вашей фразы не понятно, какого уровня проект, какой стек, какие конкретно задачи Вы решали, как успешно Вы их решали. Работодателю нужно понимать Ваш реальный опыт и Ваши реальные возможности, а не нечто эфемерное "решал небольшие задачи".

    4.
    Если вспомнить css и html

    Вот такое никогда не пишите. Лучше соврать или преувеличить, или даже написать "Отличное знание", но не так как Вы здесь сформулировали.

    5. Не нужно оставлять ссылки на каждый проект в репозитории. Либо один, самый интересный на Ваш взгялд, либо одна ссылка на сам репозиторий. Работодатель пойдет туда только, если Вы заинтересуете его, не раньше. И ему пары файлов хватит оценить ваш уровень. Он не будет делать ревью всех Ваших проектов.

    6. Опыта одного проекта мало. Где опенсерс проекты, где участия в хакатонах, где амбиции стартапов, посещение конференций? Работодатель хочет понимать как Вы заинтересованы развиваться, какие у Вас планы для дальнейшего роста. Он берет вас нулевым не из альтруистических побуждений, а с надеждой, что Вы быстро вырастите и вернете ему прибылью затраченное на Вас время. Из Вашего резюме видно только одно: я студент - дайте работу. А почему Вам, за какие такие заслуги и что с этого будет иметь работодатель - не понятно.

    7. Я посмотрел Ваш код. Я бы не хотел, чтобы так писали у меня в проекте, начиная от именований и заканчивая некоторой логикой. Вас надо очень осторожно подпускать к реальным задачам и контролить, что Вы там напишете, просто чувствуется маленький опыт и до "отличных знаний" там далеко.

    В общем, вывод. Пока у Вас за плечами нет списка реальных проектов, чтобы Вас пригласили, надо себя выпячивать, хвастаться достижениями, демонстрировать амбиции, свою уникальность. Нужно убеждать работодателя, что Вы именно тот, кто ему нужен. В резюме этого нет. Когда у Вас будет пяток законченных проектов, будет наоборот, работодатель будет за Вами бегать и убеждать, что Вам у него будет лучше всего. И на hh студентов практикантов не ищут, поэтому только Вы должны делать отклики на вакансии, обязательно с сопроводительным письмом, в котором парой фраз Вы сможете заинтересовать работодателя.
    Ответ написан
  • C# как удвоить символ через отдельную функцию?

    @kttotto
    все, что .NET
    var source = "Test";
    
    // v.1 Заменит первое вхождение этой буквы в слове на удвоенную
    var ch = 's';
    var i = source.IndexOf(ch);
    var result = source.Substring(0, i) + ch + source.Substring(i);
    
    // v.2  Заменит все вхождения этой буквы в слове на удвоенную
    var ch = "s";
    var result = source.Replace(ch, ch + ch);
    Ответ написан
  • Как развернуть матрицу(С#)?

    @kttotto
    все, что .NET
    То, что Вы массив вывели как матрицу, не значит , что Вы создали матрицу. В обычном случае матрица инициализируется двойным циклом, где внешний считает строки, а внутренний колонки. При повороте, просто меняете местами - внешний считает колонки, а внутренний строки.
    static void Main(string[] args)
    {
        var str = "ВРАГ БУДЕТ РАЗБИТ";
        str = str.Replace(" ", string.Empty);
        char[] array = str.ToCharArray();
    
        var columnCount = 5;
        var rowCount = array.Length / columnCount;
        if (rowCount * columnCount < array.Length)
        {
            ++rowCount;
        }
    
        // Создаем перевернутую матрицу
        var invertedArray = new char[rowCount, columnCount];
        var counter = 0;
        for (var i = 0; i < columnCount; i++)
        {
            for (var j = 0; j < rowCount; j++)
            {
                invertedArray[j, i] = array[counter++];
            }
        }
    
        // Выводим матрицу на экран стандартным способом
        for (var j = 0; j < rowCount; j++)
        {
            for (var i = 0; i < columnCount; i++)
            {
                Console.Write(invertedArray[j, i]);
            }
            Console.WriteLine();
        }
    
        Console.ReadKey();
    }
    Ответ написан
  • Как к текстовочисленному ID прибавить 1 в С#?

    @kttotto
    все, что .NET
    Вытаскивает цифровую группу с конца строки с помощью регулярки, ну соответственно потом приводится к int и инкрементируется.
    var stringId = "client123456"
    var regex = new Regex(@"\d+$");
    
    var match = regex.Match(stringId);
    if(string.IsNullOrEmpty(match.Value)
    {
    	// В id не найдено цифровой части
    	return;
    }
    
    var intId = int.Parse(match.Value)
    var newId = $"client{++intId}"
    Ответ написан
  • Переход с C++ на C#?

    @kttotto
    все, что .NET
    Шесть лет назад ушел с плюсов в .net. Случилось как-то случайно, надо было что-то сделать десктопное, до этого я это делал на win32 и это было жестоко, на винформах это было просто сказкой. А потом все сползло в веб и теперь я фулстек с упором в asp. И да, для C# работы побольше, но QT так же востребован, хоть и в меньшей степени.

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

    Каких то советов дать сложно. Мне кажется, все само вырулится и со временем само определится со стеком. Когда я окунулся в веб, я с ума сходил от того, в скольких технологиях надо разбираться и уметь ими пользоваться, в плюсах как то с этим по проще было.
    Ответ написан
  • Что выводит лямбда-выражение?

    @kttotto
    все, что .NET
    1. Может подчеркивать потому, что хочет присвоения переменной.
    var index = spisok.FindIndex(s => s.zachetka == zachetka)

    2. Нет юзинга using System.Collections.Generic
    Ответ написан
  • Тенденции рынка труда для ASP.NET CORE разработчиков?

    @kttotto
    все, что .NET
    Да, так и есть. Если планируете в веб разработку, то придется хоть в каком то виде и в фронт-енд разбираться.
    Ответ написан
  • Как правильно возвращать объект из async метода в .NET?

    @kttotto
    все, что .NET
    1. У Вас корректные примеры, никаких await Task.FromResult не нужно.
    2.
    при вызове метода GetRequestResult придётся писать await

    Придется. async/await заразен, он вынуждено подымается вверх по вызовам. С с .Result Вы убьете асинхронность, сомневаюсь, что в Ваше случае есть необходимость в его применении.

    Бест практика одна - использовать его как будто это обычный метод, в этом и красота его применения. await перед вызовом говорит только, что вызывающий поток освободится. Ну и нужно помнить о контексте синхронизации и понимать когда можно сделать .ConfigureAwait(false).
    Ответ написан
  • Высокоуровневые макросы в C#, есть ли готовые решения?

    @kttotto
    все, что .NET
    Ищите scaffolding для .net, но пишется он на основе t4. Именно так пишутся шаблоны типов проектов для vs.
    Первое, что показал поиск тут.

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

    @kttotto
    все, что .NET
    Первое, если OrderService не будет резолвится как синглтон, то на каждый запрос будет создваться свой инстанс сервиса, т.е двух потоков на один метод не будет.

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

    Третье, чтобы не было двух одновременных запросов с одного клиента, надо дизейблить кнопку и показывать прелоадер до получения ответа.

    Ну и четвертое, если хотите получить баланс до того как другой запрос туда что-то добавит, то в AddOrder используйте транзакции с достаточным уровнем блокировки на изменение.
    Ответ написан
  • Что значит инъецировать, а также создавать один класс от другого (паттерн MVP) в C#?

    @kttotto
    все, что .NET
    1. Инъецирует, значит не создает экземпляр внутри себя (т.е. не делает new Service()), а принимает Service как параметр, чаще всего как параметр конструктора
    var service = new Service();
    var presenter = new Presenter(service);

    2. Да, это значит, что презентер должен создать внутри себя модель и вернуть ее для отображения. И в тексте не написано, что это view. Это две разные модели.
    Ответ написан
  • Как получать по 5 элементов из массива?

    @kttotto
    все, что .NET
    C#
    1. list.Skip(n).Take(5)
    2.
    var slice = new ArraySegment<string>(list, n, n + 5)

    3. Можете еще использовать очередь
    var queue = Queue<string>() { ... };
    var el1 = queue.Dequeue()
    var el2 = queue.Dequeue()
    var el3 = queue.Dequeue()
    var el4 = queue.Dequeue()
    var el5 = queue.Dequeue()
    Ответ написан
  • С# стоимость приведения типа?

    @kttotto
    все, что .NET
    Для ссылочных типов, в рантайме, это почти ничего не стоит. Основная проверка привидения происходит на стадии компиляции.
    По сути при таком приведении нет необходимости создавать новый объект, перемещать его в памяти. Просто ссылка entity, теперь будет указывать на объект MyType, но доступ к интерфейсу будет другой.
    В рантайме можно упасть с ошибкой привидения, если Вы в object положили MyType1, а привести пытаетесь к MyType2, интерфейсы совпадать не будут и ясно, что вызывать будет нечего.

    PS: Посмотрел поиском, это все написано в MSDN
    Операция приведения между ссылочными типами не меняет тип времени выполнения базового объекта; изменяется только тип значения, который используется в качестве ссылки на этот объект.
    Ответ написан
  • C# модульная архитектура. Как получить доступ к стат. классу программы из плагина?

    @kttotto
    все, что .NET
    Если плагину предоставляется апи приложения, вот и добавьте апи, через который будете отдавать плагину инфу своего статического класса.
    Либо плагин, при инициализации, должен иметь возможность получать извне набор параметров, через который возможно будет принять ваши опции.
    Ответ написан
  • Как убрать отслеживание объекта при сохранении?

    @kttotto
    все, что .NET
    Всего скорей, Вы руками создали объект routeSave с айдишником, который уже есть в базе и пытаетесь его добавить. Если Вы хотите изменить существующий объект, то его сначала надо получить, но только не вот так, как Вы это делаете
    .ToList()[0]
    а так
    _dbContext.Routes.FirstOrDefault(a => a ...
    Ответ написан
  • Почему функция нестабильно читает файл?

    @kttotto
    все, что .NET
    Запустите студию с правами администратора и проверьте, будет ли та же проблема. Если нет, значит дело в правах. Если будет, смотрите на размер файла, буфер, блокировку файла другими процессами, возможно делается одновременная попытка чтения из других потоков.
    Ответ написан