Задать вопрос
  • Почему говорят, что C# не подходит для WEB?

    Griboks
    @Griboks Куратор тега C#
    Отлично подходит, если руки из того места растут.
    Ответ написан
    Комментировать
  • Visual Studio 2017. Нужна помощь с хоткеями. Не по теме: долбанный знак вопроса?

    Griboks
    @Griboks
    Установите ReSharper
    Ответ написан
    Комментировать
  • Visual Studio 2017. Нужна помощь с хоткеями. Не по теме: долбанный знак вопроса?

    kynisa
    @kynisa
    I just press buttons.
    Есть. ReSharper вообще для VS мастхэв.
    Ответ написан
    Комментировать
  • Как правильно называется вакансия?

    @protven
    Он на взлете (опять) зарубежом, используется как правило аналитиками (data scientist). Взлет связан в основном с хайпом вокруг анализа данных, машинного обучения и бигдаты. R очень хорош для быстрого прототипирования на небольшом наборе данных или уже для "окончательного" анализа и визуализации, опять же на небольшом или среднем наборе данных, которые прошли предварительную обработку и очистку. Много библиотек связанных с матстатистикой, машинным обучением, анализом данных, визуализацией. Оракл обещал вставить возможность писать хранимки на R в свою базу данных, но я не следил сделали ли.
    Я проходил в свое время курсы на Coursera по анализу данных, мне R как сам язык понравился средне. Сейчас идет конкуренция между R и питоном с библиотеками типа numpy, pandas, sklearn и тд за звание лучшего инструмента для анализа данных. Плюс есть вендорские инструменты, типа SPSS, которые предлагают ту же возможность.
    Что касаемо вакансий в вашем регионе, то они есть, но их мало. Вот пример https://hh.ru/vacancy/20496633?query=%D0%B0%D0%BD%...
    Я бы не стал расчитывать что в России вообще, а тем более за пределами Москвы вы сможете легко найти работу аналитиком данных, не имея реального опыта и успехов в этой области. Но, повторюсь, за рубежом профессия Аналитка Данных сейчас очень популярна и язык R часто считается одним из необходимых инструментов, которым он должен владеть (см. ремарку про питон).
    Ответ написан
    2 комментария
  • Оправданно ли поведение менеджера проекта в описанной ситуации?

    lxsmkv
    @lxsmkv
    Test automation engineer
    был у нас такой руководитель, любил твердить одни и те же догмы, начинать письма с "как я уже говорил". Мы конечно все про себя закатывали глаза, и все такое. Но когда он ушел и его работу передали двум нашим лучшим программистам, те, через два месяца признались, что с ним было лучше. Он, имея способность как убеждать так и обрубать людей (такой спорщик-манипулятор), в конечном итоге помогал нам, вырезая из требований всякий бред. Добивался ясности в концептах и документах. Отфутболивал баги, которые нашей команды не касались. Всячески переводил стрелки. Все это он делал из желания прикрыть себе тыл. Так что с одной стороны качества руководителя могут быть не заслуживающими уважения но с другой стороны - полезными. Постарайтесь понять именно полезные стороны. Они есть.
    Ответ написан
    Комментировать
  • Как просмотреть обработанный sql код после внесения параметров на C#?

    cjey
    @cjey
    SQL Profiler
    Ответ написан
    Комментировать
  • Вопрос по требованиям к реализации?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    1) Использовать файл конфигурации приложения для User-specific настроек

    Рядом со сборкой (MyApplication.exe или MyApplication.dll) можно положить XML-файл настроек (MyApplication.config), который будет влиять на конкретный экземпляр сборки. Можно почитать об этом у Рихтера (в главе про разветывание сборок) или в документации, там же есть XML-схема.
    Кроме того, такой Web.config файл есть у каждого ASP.NET-приложения (а у десктопного - App.config) на уровне проекта (не путать с Web.config в папке Views)

    2) Использовать ресурсы для хранения UI-строк

    Все видимые пользователю строковые ресурсы в приложениях принято оборачивать заменять на локализованный эквивалент. Это может быть сервис, в который подставит нужные значения, в зависимости от настроек приложения/языка пользователя и т.п. Грубо говоря, словарь терминов, который выбирает значения из таблицы по значению. Используется что-то вроде:
    <h3>@Localization.Get("Contacts_PageHeader")</h3>
    Извлекать значения, соответственно, из ресурсов.
    Ответ написан
    Комментировать
  • Как сделать что бы модальное окно открывалось в определенном блоке?

    iiiBird
    @iiiBird Куратор тега HTML
    Пока ты спишь - твой конкурент совершенствуется
    скорее всего ты путаешь модальное окно с каким нибудь popover getbootstrap.com/docs/3.3/javascript/#popovers
    Ответ написан
    5 комментариев
  • Какие технологии .NET стоит изучать сейчас?

    @Anfor
    начинающий
    Я вот тоже относительно недавно начал погружаться в .NET технологии. И что бы понять с чего начать, я прошелся по вакансиям и посмотрел, что требуют от C# разработчика.

    В среднем по вакансиям требовали:
    1) Знание самого C#
    2) SQL
    3) ASP.NET MVC
    4) Enity Framework
    5) WPF
    6) Frontend направление

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

    @mafusailmagoga
    Редко unsafe используют - потому что нахрен он нужен в языке, который принципиально улучшен как раз тем что код полностью managled.

    Уж всяко не в вашем примере, а ради задач посерьезнее стоит заморачиваться с unsafe.

    А прямая работа с указателями исключена - потому что как раз именно с указателями в С++ случается чуть ли не больше всего ошибок у программистов.

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

    Считаете себя крутым и пишущим без ошибок (хотя это и не так, 100% не так) и вам не нравятся ограничения C# - ну и не пишите на C#, в чем проблем-то?

    Но возмущаться что в одном языке одна идеология, а в другом другая - как то странно.
    Зачем бы были нужны языки с одинаковой идеологией.
    Они очень разные.

    С# и C++ только по синтаксису сходны.
    Не нужно чисто механически привносить в один язык подход из другого языка.


    Т.е. есть ситуация - у меня есть класс с 150 переменными (int), я хочу непосредственно эти переменные менять, передавая её в другой класс


    Вероятность схлопотать сторонние эффекты очень велика.
    Класс это ведь не просто одна переменная как правило.
    Если вы эту переменную инкрементируйте, состояние всего класса как то может сильно поменяться.
    Если вы меняете напрямую, не давая классу это проконтроллировать - непонятно к чему это может привести.


    НО мне что, 150 функций


    А их и не должно быть у вас 150.
    См. антипаттерн - класс Бог.
    Ответ написан
  • Как вы пишете SQL в своих проектах?

    @alejandro68
    или конкатенацию строк очень неудобно и, как мне кажется, так мало кто делает.


    Ну и напрасно.

    Конкатенция и форматная строка - наше все.
    Ответ написан
    Комментировать
  • Качественые видеоукроки по C#?

    @ssrdop
    itvdn Если постараться, то можно быстро найти курсы.
    Ответ написан
    1 комментарий
  • Как читать определенную информацию из txt файла (C#)?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Поскольку вы хотите работать с текстовым файлом, то можно обойтись одним файлом (Voprosi and Otveti.txt). Будут одинаковые ответы на разные вопросы — не страшно.
    Искать: или загружать файл целиком и искать подстроку, или считывать файл построчно.
    Ответ написан
    Комментировать
  • В каком контроллере правильно разместить метод, возвращающий пользователей группы?

    @Camaro67
    Помог? - жми "Отметить решением"
    Явно не в GroupControlle. В UserController т.к. именно здесь идет работа с самими пользователями. Хотя я бы вообще добавил отдельную модель для этого. Если я правильно понял вашу задачу.
    Ответ написан
    2 комментария
  • Как стать хорошим программистом на работе?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Во первых, что такое "хороший" программист, это сложно определить. У нас тоже есть программисты, они вроде работают и деньги получают, и с образованием, а когда в продукте обнаруживаются проблемы, выясняется что логгирования в компонентах нет, о юнит-тестах никто не подумал при написании, а теперь придется рефакторить чтобы их туда прикрутить, да и если бы заранее подумали о тестировании и написали юнит тесты, то этих проблем бы не возникло сейчас. А теперь чтобы исправить проблему, нужно перекраивать код целыми слоями, а продукт уже в фазе стабилизации и просто так туда изменения не зальешь. Ну ладно можно сказать это джуниоры напортачили. Но у нас и сениоры есть, под чьим руководством они работают. И сениоры прекрасно знают как делать правильно но не требуют этого от остальных.
    Я все это к чему - можно фигачить код со скоростью электровеника, а можно писать его медленно. Скорость написания кода не говорит о том хороший программист или плохой ничего. Совсем ничего. Можно быстро писать плохой код.
    Гораздо важнее правильно мыслить. Для этого нужно читать книжки типа Clean Code. Юнит тестирование тоже. Нужно приобрести понимание хорошо и плохо. Если вы читаете код и в нем черт ногу сломит. Может это плохой код?
    Чтобы набить руку в программировании нужно им заниматься. У меня постоянно открыт repl.it где я набиваю мелкие куски кода для развлечения. Нужно постоянно тренироваться, "ни дня без строчки", только тогда мозг перейдет из режима отторжения в режим обучения. Заставляйте себя, заставляйте себя разобраться. Разберите как работют лямбды, list comprehension. разберитесь в *args, **kwargs. Выясните разницу между __new__ и __init__. Для новичка это приличная нагрузка, но вы должны поверить в то что осилите это. Иначе будете всегда пасовать.
    Почитайте гайдлайны по питону docs.python-guide.org/en/latest/writing/style
    Питон очень стройный язык, он вам не сломает мозг как какая нибудь ява. Читайте хаб по питону на тостере, на хабре. Я например пытаюсь решить задачки которые пролетают тут по хабу, и улучшил свои знания питона за счет этого.
    Удачи, надеюсь смог хоть как-то помочь.
    Ответ написан
    5 комментариев
  • Десериализация json в C# с помощью Newtonsoft.Json.dll?

    Kubatai
    @Kubatai
    Техник-программист
    Опишите некий класс Answer(произвольное название), в котором будут хранится свойства с такими же именами и типами, как в вашем json, и при десериализации ссылайтесь на этот класс вот так:
    Answer answer= JsonConvert.DeserializeObject<Answer>(iJson);

    Для быстрого преобразования json-данных в классы c# можно воспользоваться данным онлайн-сервисом:
    json2csharp.com

    Описания классов json от сервиса выше
    // To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
    //
    //    using QuickType;
    //
    //    var data = GettingStarted.FromJson(jsonString);
    //
    // For POCOs visit quicktype.io?poco
    //
    namespace QuickType
    {
        using System;
        using System.Net;
        using System.Collections.Generic;
    
        using Newtonsoft.Json;
    
        public partial class GettingStarted
        {
            [JsonProperty("measures")]
            public Measures Measures { get; set; }
    
            [JsonProperty("number2")]
            public Number2 Number2 { get; set; }
    
            [JsonProperty("items")]
            public Items Items { get; set; }
    
            [JsonProperty("number1")]
            public Number1 Number1 { get; set; }
    
            [JsonProperty("user")]
            public User User { get; set; }
        }
    
        public partial class Measures
        {
            [JsonProperty("2")]
            public OtherThe1 The2 { get; set; }
    
            [JsonProperty("1")]
            public OtherThe1 The1 { get; set; }
    
            [JsonProperty("3")]
            public OtherThe1 The3 { get; set; }
        }
    
        public partial class OtherThe1
        {
            [JsonProperty("name")]
            public string Name { get; set; }
    
            [JsonProperty("title")]
            public string Title { get; set; }
        }
    
        public partial class Number2
        {
            [JsonProperty("2")]
            public OtherOtherOtherThe1 The2 { get; set; }
    
            [JsonProperty("1")]
            public OtherOtherOtherThe1 The1 { get; set; }
    
            [JsonProperty("3")]
            public OtherOtherOtherThe1 The3 { get; set; }
        }
    
        public partial class OtherOtherOtherThe1
        {
            [JsonProperty("name")]
            public string Name { get; set; }
    
            [JsonProperty("description")]
            public string Description { get; set; }
    
            [JsonProperty("parent")]
            public string Parent { get; set; }
    
            [JsonProperty("title")]
            public string Title { get; set; }
        }
    
        public partial class Items
        {
            [JsonProperty("2")]
            public The1 The2 { get; set; }
    
            [JsonProperty("1")]
            public The1 The1 { get; set; }
    
            [JsonProperty("3")]
            public The1 The3 { get; set; }
        }
    
        public partial class The1
        {
            [JsonProperty("measure")]
            public string Measure { get; set; }
    
            [JsonProperty("number")]
            public string Number { get; set; }
    
            [JsonProperty("foxproID")]
            public string FoxproID { get; set; }
    
            [JsonProperty("name")]
            public string Name { get; set; }
    
            [JsonProperty("producer")]
            public string Producer { get; set; }
    
            [JsonProperty("suodID")]
            public string SuodID { get; set; }
        }
    
        public partial class Number1
        {
            [JsonProperty("2")]
            public OtherOtherThe1 The2 { get; set; }
    
            [JsonProperty("1")]
            public OtherOtherThe1 The1 { get; set; }
    
            [JsonProperty("3")]
            public OtherOtherThe1 The3 { get; set; }
        }
    
        public partial class OtherOtherThe1
        {
            [JsonProperty("description")]
            public string Description { get; set; }
    
            [JsonProperty("name")]
            public string Name { get; set; }
        }
    
        public partial class User
        {
            [JsonProperty("login")]
            public string Login { get; set; }
    
            [JsonProperty("ip")]
            public string Ip { get; set; }
    
            [JsonProperty("number")]
            public long Number { get; set; }
        }
    
    
        public partial class GettingStarted
        {
            public static GettingStarted FromJson(string json) => JsonConvert.DeserializeObject<GettingStarted>(json, Converter.Settings);
        }
    
        public static class Serialize
        {
            public static string ToJson(this GettingStarted self) => JsonConvert.SerializeObject(self, Converter.Settings);
        }
    
        public class Converter
        {
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
                DateParseHandling = DateParseHandling.None,
            };
        }
    }
    Ответ написан
    Комментировать
  • Свойства(автосвойства) в c# это поведение или состояние объекта?

    @wol2for
    Определимся с терминологией:


    1. Объект обладает состояние и поведение (Гради Буч)

      Подчеркну еще раз, объект. Не тип, не класс(класс только описывает будущий объект), а объект.


    2. Состояние объекта характеризуется перечнем (обычно статическим) всех свойств данного объекта и текущими (обычно динамическими) значениями каждого из этих свойств. (Гради Буч)




    3. Поведение - это то, как объект действует и реагирует; поведение выражается в терминах состояния объекта и передачи сообщений. Иными словами, поведение объекта - это его наблюдаемая и проверяемая извне
      деятельность
      . (Гради Буч)




    4. Свойство — это член, предоставляющий гибкий механизм для чтения, записи или вычисления значения частного поля. Свойства можно использовать, как если бы они были членами общих данных, но фактически они представляют собой специальные методы, называемые методами доступа. Это позволяет легко получать доступ к данным и помогает повысить безопасность и гибкость методов. (Свойства MSDN)




    5. Свойства позволяют обращаться к методу в исходном тексте программы, используя упрощенный синтаксис. (Рихтер, глава 9, стр. 204 по книге)




    6. Осторожный подход к определению свойств. Лично мне свойства не нравятся, и я был бы рад, если бы их поддержку убрали из Microsoft .NET Framework и сопутствующих языков программирования. Причина в том, что свойства выглядят как поля, на самом деле являясь методами. Это по рождает массу заблуждений и непонимания. Столкнувшись с кодом, обращающимся к полю, разработчик привычно предполагает наличие массы условий, которые просто не всегда верны, если речь идет о свойстве. (Рихтер, глава 9, стр. 204 по книге)



    А теперь разберемся, что к чему.
    Пример из того же Рихтера глава 9.
    public sealed class Employee 
        {
        private String m_Name;   // Это состояние 
        private Int32  m_Age;    // Это состояние 
        
        public String GetName() // Это поведение  
        {
           return(m_Name);
        }
        public void SetName(String value) // Это поведение
        {
           m_Name = value;
        }


    Равносилен этому примеру из той же главы (Рихтер об это сам и говорит):
    public sealed class Employee 
        {
           private String m_Name; // Это состояние 
           private Int32  m_Age; // Это состояние 
        
           public String Name // Это поведение  
           {
             get { return(m_Name); }
             set { m_Name = value; }
           }  
        }


    Тут уже становится ясно что свойства это механизм доступа к закрытым полям, который осуществляется через методы. А значит, что Свойства это поведение. Рихтер как раз и критикует свойства, за то что они похожи на поля, а на самом деле это методы (которые предоставляет доступ к закрытым полям). Рихтер вообще предлагает убрать свойства, дабы избежать путаницы (в книге он рассматривает проблему со свойствами с другой стороны, но это еще одна грань проблем связаны с свойствами).

    И, по-поводу свойства в интерфейсах, они помечаются как abstract, и выглядят примерно так:
    public abstract String GetName();
    public abstract void SetName(String value);

    Это просто голые методы без реализации. Они не могут быть ни состояние, ни поведение, так как только ОБЪЕКТ может иметь состояние и поведение.

    Экземпляр интерфейса и абстрактного класса нельзя создать, по этому к ним применение понятия состояния и поведения невозможно.
    Ответ написан
    1 комментарий
  • Как в процессе выполнения makefile изменить файл?

    GavriKos
    @GavriKos
    Лучше не менять конфигурационные файлы, а в зависимости от цели подгружать другой конфиг, и держать ВСЕ конфигурационные файлы. Потому что после изменения вам тогда ревертить (или пушить в репу), да и вносить изменения в изменения (shit) тоже придется иногда...
    Ответ написан
    Комментировать
  • На каком этапе лучше начинать изучать паттерны проектирования?

    Паттерны имеет смысл учить после 1-2 лет разработки.
    Хорошее место для старта - https://metanit.com/sharp/patterns/ (знаю их наизусть)

    Почему не сразу?
    Да потому что это будет бесполезно, нет еще проблем которые бы решались с применением паттернов, их не видно за незнанием языка.
    Когда сам язык на котором вы пишите является проблемой, то паттерны только увеличат срок его освоения.

    Сначала учимся ходить, потом бегать.

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

    Это мое ИМХО.
    Ответ написан
    1 комментарий
  • Зачем использовать StringBuilder, если есть интерполяция?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    StringBuilder позволяет сэкономить память если у вас есть код, который работает с большим количеством строк или делает с ними что-то очень часто. Во всех остальных случаях можно пользоваться интерполяцией и плюсовать строки. Где-то видел тест, что StringBuilder выгоднее по памяти уже на пяти конкатенациях, но тут уж вам решать заморачиваться так или нет.
    Ответ написан
    Комментировать