Ответы пользователя по тегу C#
  • Правильная архитектура при построение Web приложения?

    @kttotto
    пофиг на чем писать
    Архитектура никак не зависит от стека.
    5e6ddff504334597793261.png
    Где здесь, хоть что-то указывает на стек?
    При "правильной архитектуре" каждая часть может быть написана на чем угодно (в пределах разумного, конечно) и все будет работать как часы.
    Ответ написан
    Комментировать
  • Вопрос о делегатах и рефлексии типов в C#. Как по делегату узнать, к какому полю объекта обращаются в теле делегата?

    @kttotto
    пофиг на чем писать
    Да, реально. Это работа с деревом выражения, как точка отсчета для тебя тут, больше примеров тут.
    Ответ написан
    Комментировать
  • Как побороть ошибку преобразования?

    @kttotto
    пофиг на чем писать
    В Вашем случае i это отложенный сложный запрос/выборка, еще невыполненный. Вы пытаетесь его преобразовать в другой тип. Попробуйте его, на всякий случай, сначала закрыть ToList(), а затем преобразовать его либо через Select, либо через Cast. В принципе, если внутри запроса ничего сложного нет, то можно и не делать ToList().
    Ответ написан
    Комментировать
  • Как проверить на null Vue.JS из Модели ASP.Net?

    @kttotto
    пофиг на чем писать
    Судя по тому, что Вы хотите сделать split, предполагаю, что Model.Tags имеет тип string.
    Тогда, как вариант, можно сделать так
    addTags: function() {
    	this.tags = @Json.Serialize(Model?.Tags?.Split(',') ?? []);
    }


    Ошибка в этой строке
    if(@Model != null && @Model.Tags != null)
    потому, что @Model приведется к string в разметке, а @Model.Tags вставится как строка как есть. И в разметке выйдет что-то такое
    if(System.Object != null && tag1,tag2,tag3 != null) { ... }

    Ну и понятно, что такая разметка в браузере даст ошибку. Поэтому, перед тем как вставить модель в разметку js, лучше делать сериализацию к json. Ну либо делать как-то так
    if('@(Model?.Tags ?? "")'.length > 0) { ... }
    Ответ написан
    Комментировать
  • Как передавать данные в контроллер??

    @kttotto
    пофиг на чем писать
    Думаю, что проблема в
    JSON.stringify(books)
    т.к. по сути этой строкой Вы отправляете string, а не объект. Несовпадение типа, он его и не видит.
    Если хотите в методе объект принять, не нужно его к строке преобразовывать, можно просто
    data: books,
    Но что-то мне подсказывает, что в Вашем варианте и здесь могут быть проблемы. Зачем Вы принимаете JObject?
    Преобразуете его потом, примите его как есть массивом
    public async Task<JsonResult> Settings(object[] books)

    А еще лучше, типизируйте как положено, ну а затем сделаете что-то вроде JObject.FromObject(books).

    PS:
    а метод Settings возвращает ошибку не выполняя метод.

    В таких случаях хорошо бы и текст ошибки к вопросу прикладывать.
    Ответ написан
    Комментировать
  • Как передать массив из c# в javascript?

    @kttotto
    пофиг на чем писать
    Судя по тэгу Вы хотите это сделать в ASP MVC приложение.
    Там есть вариант сделать это на вьюшке с помощью Razor

    <script>
    	var model = @Json.Serialize(Model.yourArray);
    	
    	var model2 = @Html.Raw(JsonConvert.SerializeObject(Model.yourArray));
    	
    	var model3 = [@Model.yourArray[0], @Model.yourArray[1], @Model.yourArray[2]]
    </script>
    Ответ написан
  • C#. Тип "Settings" уже определяет член "Save" с такими же типами параметрами. Что делать?

    @kttotto
    пофиг на чем писать
    При перегрузке методы должны отличаться сигнатурой - отличаться типом или кол-вом входящих параметров. Если при вызове метода Save Вы всегда знаете какой параметр или параметры хотите сохранить, то в Вашем случае я вижу два варианта:
    первый, если таких перегрузок требуется два-три, то каждый метод можно назвать по другому, например SaveMacDir, SaveAccpath и т.д.
    второй, если этих парметров три, то два из них сделать необязательными
    public void Save(string accpath, string macDir = null, string stId = null)
    {
    	try
    	{
    		using(var sw = new StreamWriter("**"))
    		{
    			if(!string.IsNullOrEmpty(accpath))
    			{
    				sw.WriteLine(accpath);
    				AccPath = accpath
    			}
    			if(!string.IsNullOrEmpty(macDir))
    			{
    				sw.WriteLine(macDir);
    				Macros_Directory  = macDir;
    			}
    			if(!string.IsNullOrEmpty(stId))
    			{
    				sw.WriteLine = stId;
    				SteamID = stId;
    			}
    		}
    	}
    	catch(Exception ex) { }
    }

    И вызывать их как
    Save(accpath)
    Save(accpath, macDir)
    Save(accpath, macDir, stId)
    Save(null, macDir, stId)
    Save(accpath, null, stId)
    Ответ написан
    1 комментарий
  • Что изучать ADO NET или Entity Framework?

    @kttotto
    пофиг на чем писать
    Не знаю, что за "умный" модератор посчитал, что этот вопрос Стоит ли использовать ADO .NET взамен Dapper и EF Core? тоже самое, что текущий. Суть вопросов абсолютно разная, хоть у буквы у некоторых слов одинаковые. Поэтому отвечаю sergeyiljin на его вопрос.

    На все должен быть смысл. EF и Dapper (и вообще ORM) создавались не "от нечего делать", в них была потребность. Хорошая ORM в нужном месте облегчает жизнь разработчику как в разработке кода, так и в его поддержке. Сейчас наоборот стараются максимально абстрагироваться от использования чистого sql и хранимок на бд, все-таки удобнее, работать с кодом в одном месте - и дебажить, и поддерживать в разы проще. И если работаете в ООП парадигме, то удобнее чтобы данные тоже были приближены к объектному виду. Поэтому если Вы не в жестком интерпрайзе и хайлоаде, то нет смысла уходить в прошлое. Знаю один крупный банк, который год назад искал нового разраба на существующий проект документооборота, где надо было все хранимки, более 5к, и sql в коде, перевести в EF. Наверное же не просто так они приняли такое решение.
    Ответ написан
    Комментировать
  • Как мне с IDataReader привести к int?

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

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

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

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

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

    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
    пофиг на чем писать
    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);
    Ответ написан
    1 комментарий
  • Как развернуть матрицу(С#)?

    @kttotto
    пофиг на чем писать
    То, что Вы массив вывели как матрицу, не значит , что Вы создали матрицу. В обычном случае матрица инициализируется двойным циклом, где внешний считает строки, а внутренний колонки. При повороте, просто меняете местами - внешний считает колонки, а внутренний строки.
    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
    пофиг на чем писать
    Вытаскивает цифровую группу с конца строки с помощью регулярки, ну соответственно потом приводится к 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. Случилось как-то случайно, надо было что-то сделать десктопное, до этого я это делал на win32 и это было жестоко, на винформах это было просто сказкой. А потом все сползло в веб и теперь я фулстек с упором в asp. И да, для C# работы побольше, но QT так же востребован, хоть и в меньшей степени.

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

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

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

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

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