Ответы пользователя по тегу C#
  • Быстрый поиск по базе. Что выбрать?

    Nipheris
    @Nipheris Куратор тега C#
    кроме SQL

    Ну раз не SQL (каковы объективные причины?), то берите любую key-value базу и пишите в неё. Поиск будет идти по ключу целиком или по части?
    Вы сейчас описали стандартную задачу для любой нормальной базы данных. Т.е. той, в которой есть индексы. Рассуждать имеет смысл только если вы укажете, насколько часто будут вставляться строки, и какие точно будут выборки.
    Ответ написан
  • На чем быстрее парсить?

    Nipheris
    @Nipheris Куратор тега C#
    HtmlAgilityPack либо же использовать Регулярные выражения?

    stackoverflow.com/a/1732454/3927447

    Этим все сказано.
    Ответ написан
    1 комментарий
  • Что делают делегаты в C#?

    Nipheris
    @Nipheris Куратор тега C#
    Функциональный объект.
    Как разберетесь, что это, так и поймете, что такое делегат.
    Ответ написан
    Комментировать
  • Как организовать работу транзакций в микросервисной архитектуре?

    Nipheris
    @Nipheris Куратор тега C#
    Теоретический аспект: https://en.wikipedia.org/wiki/Two-phase_commit_protocol
    Реализация: https://msdn.microsoft.com/en-us/library/system.tr... , ну или свой велосипед (на базе HTTP или очередей сообщений).
    Ответ написан
    Комментировать
  • Как писать тесты в asp.net mvc не затрагивая Entity Framework?

    Nipheris
    @Nipheris Куратор тега C#
    Как мокать EF не используя не нужный слой абстракции с репозиторями таким образом чтобы весь функционал EF оставался рабочим?

    Может, не такой он уж он не нужный? Репозиторий нужен в том числе для того, чтобы иметь четкий список методов для тестирования. Я сейчас вообще не могу толком понять, что вы тестируете.
    Ответ написан
    Комментировать
  • Как разместить REST методы в контроллере?

    Nipheris
    @Nipheris Куратор тега C#
    Контроллеры - это ваши проекции сущностей в сервисе (грубо говоря, объектов ваших классов бизнес-логики) на ресурсы веб-API, предоставляемого сервисом. Какие сущности проецировать на ресурсы, а какие - нет, целиком зависит от того, какое API вы хотите получить в конечном счете. В каких контроллерах это делать и стоит ли разбивать N контроллеров на M контроллеров - зависит от того, как вам удобно их реализовывать. Ну это примерно то же самое, что спросить "стоит ли разбивать 5 классов на 10?". У каждого контроллера - своя ответственность. Если вы четко понимаете ответственность каждого контроллера - разбивать не надо. Если вы перестали понимать и какой-то контроллер начал делать слишком много разных вещей - надо разбить.

    Нужно понимать, что лучше сначала спроектировать интерфейсы взаимодействия крупных компонент: клиентов и сервисов, а потом уже эти интерфейсы реализовывать. В случае REST, вы сначала проектируете REST API, исходя из задач вашего приложения, а потом уже реализуете сервис и клиент.

    методы реста post (добавление, обновление, удаление, просмотр)

    вот этой фразы не понял.
    Ответ написан
    4 комментария
  • Как связать две иерархии классов?

    Nipheris
    @Nipheris Куратор тега C#
    Если вы обязаны жить с разделением архитектурных слоёв, о котором вы упомянули и не можете ничего поменять: первый вариант "тип" - "инициализатор" вижу наиболее удобным. Все равно придется добавлять маппинг при добавлении нового типа объекта.
    Вообще можно конечно продолжить извращение и воспользоваться рефлексией и сделать автомаппинг классов "модели" на наследников GameObject. Например, искать все классы "модели" в определенном неймспейсе и искать такие же в другом (которые, в свою очередь, будут наследниками от GameObject).

    Вообще, вы в каком-то смысле идете вразрез с архитектурой самого движка, т.к. GameObject-ы - это не только "представление", а и модель тоже. Я понимаю, что вы наверное не хотите создавать тяжелые GameObject-ы, когда они вроде как не нужны еще (т.е. не в области видимости), но возможно, если не добавлять их в сцену, они не будут нагружать движок.
    В общем, у меня есть сомнения в том, что такое разделение на модель и представление при использовании Unity - хорошая практика.
    Ответ написан
    1 комментарий
  • Где разместить список используемых библиотек и фреймворков?

    Nipheris
    @Nipheris Куратор тега C#
    Откройте для себя NuGet, NPM и Bower.
    Ответ написан
    Комментировать
  • Как создать группу элементов в форме?

    Nipheris
    @Nipheris Куратор тега C#
    Читайте про UserControl в любой приличной книжке по WPF, судя по описанию вашей задачи это именно то, что нужно.
    Ответ написан
    Комментировать
  • Как удалить дублируемые слова (и словосочетания) в строке, разделенной запятыми?

    Nipheris
    @Nipheris Куратор тега C#
    ideone.com/4z7HsT

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    public class Test
    {
    	public static void Main()
    	{
    		string text = "енот, енот, гваделупский енот, косумельский енот, енот, енот-полоскун, енот-ракоед, косумельский енот";
    		var result = text.Split(',').Select(x => x.Trim()).Distinct().Aggregate((r, word) => r + ", " + word);
    		Console.WriteLine(result);
    	}
    }
    Ответ написан
    Комментировать
  • Как часто Вы разбиваете описание одного класса на несколько файлов через partial?

    Nipheris
    @Nipheris Куратор тега C#
    Поддержу Петр . В целом, если говорить более формально, partial удобен, если:
    1) часть определения класса является генерируемой - что как раз и есть случай с WinForms. Другой пример - генерация интерфейса/определения класса для какого-нибудь веб-сервиса. На 100% не помню, но кажется генератор RAML для ASP.NET WebAPI именно так и делает.
    2) когда класс настолько большой, что пора бы уже разбить на два, но вы не можете этого сделать (слишком сложный рефакторинг, или нужно поддерживать совместимость); ну т.е. эдакое грубое решение проблемы. Если вы пишете весь класс руками, то определенно лучше стремиться к тому, чтобы его определение можно было охватить в рамках одного не слишком большого файла.
    Ответ написан
    Комментировать
  • Как автоматически выбрать тип данных?

    Nipheris
    @Nipheris Куратор тега C#
    Воспользоваться благом C# "все есть объект":
    1) заменить List<List<string>> на List<List<object>>;
    2) dt.Rows[i].Field<string>(dt.Columns[j].Caption) заменить на dt.Rows[i][dt.Columns[j]];

    3) объяснить назначение всего данного кода, ибо он напоминает переливание из пустого в порожнее, и List<List<object>> это бомба по определению.
    Ответ написан
    Комментировать
  • Учебник по MVVM+WPF с примерами/заданиями?

    Nipheris
    @Nipheris Куратор тега C#
    Raffaele Garofalo, "Building Enterprise Applications with Windows Presentation Foundation and the Model View ViewModel Pattern"

    www.oreilly.com/pub/pr/2761
    Ответ написан
    Комментировать
  • Конструкторы и приравнивание в Си подобных языках?

    Nipheris
    @Nipheris Куратор тега C++
    К сожалению, все несколько сложнее, и вам нужно лучше разобраться, что происходит в обоих случаях.

    В C++ жизненный цикл объекта, место и способ его существования определяется кодом, создающим объект. Иными словами, тот код, который ИСПОЛЬЗУЕТ класс, определяет, автоматическая ли будет создана переменная (Example a(..)), или динамическая (new Example(..)). Да, в коде класса можно ограничить использующий код, запретив использование конструктора копирования и оператора присваивания, но изначально дизайн языка подразумевает принятие решения не "создателем" класса/структуры, а её "пользователем".

    В C# поведение переменной типа класса/структуры зависит прежде всего от самого класса/структуры. Экземпляры классов, т.е. reference-типов, создаются с динамическим жизненным циклом, и для них работает механизм подсчета ссылок и сборка мусора. Экземпляры структур создаются с автоматическим жизненным циклом, переменные структур хранят значения структур, а не ссылки на них.

    Иными словами, выражение new T(...) - это просто унифицированный синтаксис создания экземпляра типа, независимый от природы этого типа. Удобно это или не очень - отдельный разговор, однако в текущем дизайне языка это достаточно логично (особенно в контексте generic-ов). Аналогично, T a - унифицированный синтаксис объявления переменной типа.

    Нельзя слепо сравнивать то, что происходит в C# и в C++.
    Ответ написан
    1 комментарий
  • Где хранить конфигурацию программы C#.NET?

    Nipheris
    @Nipheris Куратор тега C#
    Проблема в том, что нужно не допустить изменения конфигурационных файлов пользователем.

    1) запускаем сервис на другой, защищенной от юзера машине, или на этой же машине, но под системным аккаунтом (если у юзера нет прав администратора);
    2) обращаемся за конфигурацией к сервису;
    3) профит
    Ответ написан
    Комментировать
  • Можно ли писать серверную часть на С#?

    Nipheris
    @Nipheris Куратор тега C#
    Если REST - то знакомьтесь: www.asp.net/web-api .

    WCF не умер, просто на нем SOAP-сервисы лучше получаются, чем REST-сервисы (хотя, WebGet никто не отменял).

    Вообще удивительно, что вы это спрашиваете. Сегодня ASP.NET - самое рекламируемое применение C#.
    Ответ написан
    Комментировать
  • Каким образом с технологией ASP.NET MVC соотносятся языки программирования С# и VB.NET?

    Nipheris
    @Nipheris Куратор тега C#
    Ничего сложного.
    C# и VB.NET - языки программирования общего назначения, работающие поверх CLR (т.е., грубо говоря, на платформе .NET).

    ASP.NET MVC - веб-фреймворк для платформы .NET. По сути такая же библиотека классов, как и WinForms или WPF. Фишка ASP.NET в том что это поддерживаемый и развиваемый MS инструмент продакшн-уровня. Однако под дотнет есть и другие фреймворки, например Nancy или ServiceStack.

    Как уже упомянул Dmitry Pavlov , ASP.NET относится к C# как Rails к Руби, Django к Питону, и Spring к Джаве.
    Ответ написан
    Комментировать
  • На что ругается, не пойму?

    Nipheris
    @Nipheris Куратор тега C#
    Язык надо подучить сначала. Обратная косая черта должна экранироваться в строках (т.к. сама является escape-символом). Или используйте verbatim-строку, поставив в начале символ @.
    Ответ написан
    Комментировать
  • Каким образом передавать данные от приложения WinForm к веб-серверу на asp.net mvc?

    Nipheris
    @Nipheris Куратор тега C#
    Да какой уж DDE)
    У сервера API для приема данных есть? Если нет, почему бы не взять WebAPI и не написать его, раз уж основное веб-приложение на ASP.NET MVC? Будет самым простым, логичным и совместимым вариантом, просто опубликуете вебапи рядом с приложением (не забудьте авторизацию сделать).
    Есть конечно и масса других вариантов, например если данные приходят часто и много (постоянный поток), то может лучше и какой-нибудь protobuf поверх обычного TCP соединения или веб-сокетов.
    Если нельзя взять и написать такой веб-сервис для приема данных, то что тогда можно? Какие у вас ограничения?
    Ответ написан
    2 комментария
  • Как посчитать до какого значения заполнен массив по каждому из измерений?

    Nipheris
    @Nipheris Куратор тега C#
    И этот массив заполнен некоторыми строковыми значениями, но не полностью, а только до некоторых значений.

    Это предположение неверно. Массив не бывает заполнен частично, до некоторых значений. В массиве всегда есть все значения, просто при создании массива они устанавливаются в дефолтовые.
    Вам нужно хранить ваши значения в структуре переменного размера, например в списке (List).
    Либо, раз уж у вас значения строкового типа, вы можете воспользоваться тем фактом, что строка - это ссылочный тип, и поэтому может иметь значения null. Вы можете идти по элементам массива до первого встретившегося null и считать его первым "незаполенным" элементом, если это подходит для вашей задачи (правда, тогда это придется делать каждый раз заново).
    Ответ написан
    Комментировать