Ответы пользователя по тегу C#
  • В чем удобство html хелперов перед в asp.net перед обычной html разметкой?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Возможность кастомизировать эдиторы для отдельных вьюх. Иногда это просто лучше выглядит, чем генерация HTML руками (те же дропдауны). Для всего остального - просто общая консистентность с типизированными хэлперами.

    Хотя, зачастую их вообще избегают в пользу мелких вкраплений в HTML и PartialViews. Тем более, что ASP.NET Core уже идет по классическому пути шаблонизаторов - использует специальные аттрибуты (TagHelpers).
    Ответ написан
  • Есть ли в С++ аналог #region из C#?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    В C++ принято отделять объявления от определений, поэтому острой необходимости в таких штуках нет.
    Ответ написан
    Комментировать
  • Как реализовать generic репозиторий в c#?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Зачем вам дженеричные сущности? Вам же очевидно, какие там должны быть ключи. "дженеричность" заканчивается на имплементации базового репозитория
    class BaseRepository<TEntity, TKey> 
                where TEntity: class
    { 
        ...
        public TEntity GetById(TKey id)
        {
            _context.Set<TEntity>().Find(id); // в случае EF
        }
        ...
    } 
    
    class TranslationRepository: BaseRepository<Translation, int>, ITranslationRepository 
    { ... }


    ЗЫ По сути, у вас должнно быть 2 сущности:
    1. текст (включая "оригинал", ибо он тоже на каком-то языке написан)
    2. язык

    Для каждой свой репозиторий, а над ними общий локализационный сервис.
    Ответ написан
    Комментировать
  • (Пример из Unity3d) Проблема с понимаем типов в C#, как оно работает?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    а оператор new мы не использовали

    Например, так:
    using System;
    using System.Reflection;
    
    public class Program
    {
    	public static void Main()
    	{
    		MoveObject obj = UnityFactory.GetInstance<MoveObject>();
    		
    		obj.moveObject.SayHello();
    	}
    }
    
    
    public class GameObject
    {
    	private string name;
    	
    	public GameObject()
    	{
    		name = "John";
    	}
    	
    	public void SayHello() {
    		Console.WriteLine("Hello! My name is " + name );
    	}
    }
    
    
    public class MoveObject
    {
        public GameObject moveObject;
    }
    
    
    public class UnityFactory {
        public static T GetInstance<T>() where T: new()
    	{
    		
    		// Создадим экземпляр основного класса
            T instance = (T)Activator.CreateInstance(typeof(T));
    		
    		// Инициализируем его открытые поля
            FieldInfo[] fields = typeof(T).GetFields();
    		
            foreach (FieldInfo field in fields)
            {
                object fieldValue = Activator.CreateInstance(field.FieldType);
                field.SetValue(instance, fieldValue);
            }
    		
    		return instance;
        }
    }
    Ответ написан
    Комментировать
  • Как можно мокнуть даный код?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Очевидно, что нужно изолировать ConfigurationManager, обернув его в "фасад" IConfiguration с соответствующими методами доступа, а его уже мокать.

    interface IConfiguration
    {
        string ConnectionString { get; }
    }
    
    class AppSettingsConfiguration: IConfiguration
    {
        public string ConnectionString
        {
            get
            { 
                return ConfigurationManager.AppSettings["ConnectionString"];
            }
        }
    }


    var config = new Mock<IConfiguration>();
    config.Setup(x => x.ConnectionString).Returns("test value");
    Ответ написан
    Комментировать
  • C# Как переписать toString для свойства?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Читабельное свойство (имеющее метод get) возвращает объект некоторого класса, метод ToString которого вы можете переопределить.
    Ответ написан
    Комментировать
  • Как правильно писать Unit Test к ASP.NET MVC?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Нужно настраивать моки. Они по умолчанию возвращают default-значение требуемого типа. Таким образом внутри AddCategory мок репозитория всегда дает result == null и, соответственно, null возвращается, тест падает.

    var model = new CategoryModel { ... };
    
    var categoryModelRepository = new Mock<ICategoryModelRepository>();
    
    categoryModelRepository.Setup(x => x.AddCategory(model))
                                                .Returns(model);
    // Или
    categoryModelRepository.Setup(x => x.AddCategory( It.IsAny<CategoryModel>() ))
                                                .Returns(model);
    
    // Act...
    
    Assert.IsNotNull(result);
    Ответ написан
    7 комментариев
  • Особенности Mono и оговорки CLI-языков?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    особенности Mono...её отличия от "оригинальной" .Net

    www.mono-project.com/docs/about-mono/compatibility

    Троелсен упоминает о "серьёзных оговорках" при компиляции языков, удовлетворяющих требованиям спецификации CLI в CIL.

    Вероятно, речь идет о том, что не все языки поддерживают все возможности IL и чтобы библиотеки нормально можно было использовать в мультиязычной среде, нужно следовать некоторым ограничениям - CLS (Common Language Specification). Об этом лучше читать у Рихтера.
    Ответ написан
    1 комментарий
  • За что придется платить, если будешь использовать C# и .NET?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Можете почитать лицензионное соглашение MSVS Community 2017. Вкратце: мелким организациям и ИП - бесплатно.

    Важно отличать ASP.NET MVC и ASP.NET Core. Под первую пишут на виндах и под винду, второй - некоторой степени сырости (но жить можно), который можно использовать полностью бесплатно в любых масштабах.

    То есть для крупной организации это может быть от бесплатного .NET Core-решения на Linux (VS Code + ASP.NET Core + MS SQL Server Express), до полностью платного стека:
    1. MS Windows (на сервер, IIS в комплекте),
    2. MS SQL Server (на сервер),
    3. MS Windows для разработчика,
    4. MS Visual Studio для разработчика
    Ответ написан
    Комментировать
  • Если я пишу код на основе других, это плохо?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Все нужно делать с головой, вникать в тот код, который к себе копируешь и лишь удостоверившись, что он выполняет твою задачу оптимальным образом - подтачивать и запиливать к себе. А бездумно копипастить откуда попало - это даже хуже, чем писать велосипеды.
    Ответ написан
    Комментировать
  • Когда следует использовать структуры?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Когда вы оперируете примитивами, копирование которых достаточно дешево. В полном смысле слова значения. Примером будет System.Windows.Point или System.Decimal.
    Ответ написан
    3 комментария
  • Немного о способе изучении asp.net mvc?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    ИМХО, стоило бы изучать с Шилдта или Троелсена. Там язык подается в чистом виде, с консольными примерами, без заморочек с GUI в самом начале. XAML в вебе не нужен (ибо Silverlight, где он использовался, не особо жив), это правда.

    Для ASP.NET MVC нужен HTML/CSS и базовый SQL (ORM в виде EF есть, да, но гораздо легче ею овладевать, зная, как она общается с сервером). JavaScript можно учить параллельно. С ангуляром я бы советовал повременить, вместо него jQuery (что бы хипсторы не говорили, он сейчас почти везде).

    Вообще, идеально было бы распараллелить изучение C# в глубину (по Рихреру, например), баз данных и DAL (ORM - EF), ASP.NET MVC и веб-фронтенда, ибо в изоляции друг от друга сложнее.
    Смотреть на ASP.NET Core новичку сейчас есть смысль лишь если нет другого компьютера, кроме мака.

    На Git выделять в отдельный шаг - это слишком. Базовые операции с Git можно изучить за вечер, по необходимости дочитывать в процессе, может еще пару вечеров факультативно выделить на "internals". Вообще необходимость в нем появится, когда будешь делать первый крупный pet-проект (то есть это где-то в процессе освоения ASP.NET MVC).

    не могли бы вы посоветовать книги для изучения С# имено под веб ?

    Адам Фриман "ASP.NET MVC X для профессионалов"
    В продаже есть версия про MVC 5, но версия от версии отличается не слишком критично, поэтому и для 4 пойдет для начала. Это книжка уже чисто про веб-фреймворк, кое-что про сишарп там обзорно и лишь в самом начале, читать ее нужно уже изучив базу языка. Кроме того автор там пишет про паттерны (пресловутый MVC и его историей развития), техники написания юнит-тестов и внедрения зависимостей (IoC/DI). Книжка мегакрутая для новичка, но достаточно непростая, требует обдумывания и на некоторое время может стать настольной.
    Ответ написан
    Комментировать
  • Есть ли парсер для header файлов(С++)?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Сейчас популярный подход - собирать сами типы уже с метаданными с помощью препроцессинга (Qt с его плагинами) или шаблонов (грибные фантазии, вроде этой). Кое-что можно узнать из type traits современных стандартов.

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

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Вы обращаетесь к свойству gt в тот момент, когда передаете его в Foo, где его значение копируется в параметр int x.
    Метод Foo не знает, откуда берется значение, ведь оно приходит через формальный параметр. Если же вы будете обращаться к свойству напрямую, то все будет так, как вы ожидаете:

    static void Foo(int z/*, int x*/)
    {
        Console.WriteLine("метод");
        if (z >= 10)
        {
            Console.WriteLine("переменная больше 10");
        }
        else
        {
            Console.WriteLine("переменная = " + gt);//x);
        }
    }
    Ответ написан
  • Каким образом приложение на С# для автотестов (Selenium) развернуть в интернете?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Зачем "размещать в интернете" тесты? Обычно тестами заведует CI, который лежит там, где пакеты собираются (с целью проверить, что очередной коммит ничего не сломал по "эффекту бабочки").

    Но, так или иначе, если сайт публичен, то размещаться тестовый проект может где угодно и представлять из себя что угодно, хоть консольное приложение (никакой ASP.NET вам не нужен, ибо Selenium WebDriver управляет браузером, а не самим приложением). Но чтобы автоматизировать инфраструктуру, удобнее пользоваться специальным тестовым типом проекта.
    Ответ написан
  • Какое направление лучше выбрать при изучении c#?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    1) С# или Visual C#?

    Где вы прочитали это? В природе бывает лишь C# и он описывается стандартами. Visual %LANG_NAME% обычно Microsoft называет свои версии Visual Studio, заточенные под конкретную технологию. Но язык все равно С#.

    2) Что такое платформа .NET Framework?

    Это как бы...фреймворк) То есть вся та среда, в которой исполняется ваша программа, включая виртуальную машину (CLI) и библиотеку стандартных классов (FCL). То есть скомпилировав свое приложение, вам его нужно этой среде передать и она гарантирует наличие всего необходимого, чтобы приложение выполнилось. Пишет о нем отлично местный гуру - Джефри Рихтер в "CLR via C#". Странно было бы, если учебники, скажем, по JavaScript вплотную рассматривали бы V8, правда?)

    3) Недавно прочитал про .NET CORE.

    Это альтернативная реализация .NET Framework. Оно иначе работает и FCL там построена иначе. Но C# там точно такой же, как и на "большом" фреймворке, так что начав учить его вы ничего не потеряете. А уж MS позаботится, чтобы их сопутствующие технологии тоже не сильно отличались (ASP.NET MVC от ASP.NET Core, EntityFramework от EntityFramework Core.

    Вывод: если вы только начинаете, то вам без разницы, хоть под Core, хоть под .NET Framework, язык там один и тот же, консольные приложения такие же. Просто некоторые классы переехали в отдельные сборки. С нуля же лезть в фреймворки (ASP.NET MVC/Core, WPF, EntityFramework (без знания ADO.NET)) - рановато, освойтесь с самим языком, базовыми библиотеками.
    Ответ написан
    2 комментария
  • Как избежать тормозов при срабатывании try catch?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Перед обращением вызывайте IDataRecord.IsDBNull (int) вместо проверки try-catch.
    Ответ написан
    2 комментария
  • Что ему не так?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Потому что \символ считается escape-последовательностью (как \t, \n, \a и прочие).
    Их надо либо каждый раз экранировать еще одним обратным слэшем, либо ставить символ @ перед литералом.
    Ответ написан
    Комментировать
  • C#: Как правильно прочитать и записать объекты в ArrayList?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Не стоит использовать ArrayListбез весомой на то необходимости. Поэтому компилятор не смог вас предупредить, что ArrayListсостоит из ArrayList'ов, в котором строки (двумерный массив строк), а не просто строк.

    Вместо ArrayListнеобходимо использовать типизированный динамический массивList<string>.

    public void Click_OpenFile()
    {
        string fileName = form1.OpenFie();
    
        IList<string[]> aL = ParseFile(fileName);
    
        foreach (var line in aL)
        {
            // Снова собираем токены в строки
            MessageBox.Show(string.Join(" ", line));
        }
    }
    
    // Читаем файл и построчно парсим его
    private IList<string[]> ParseFile(string fileName)
    {
        if (string.IsNullOrEmpty(fileName))
        {
            throw new ArgumentNullException(nameof(fileName));
        }
        if (!File.Exists(fileName))
        {
            throw new ArgumentException($"There is no file {fileName}!");
        }
    
        string[] fileContent = File.ReadAllLines(result);
        var aL = new List<string[]>(fileContent.Length);
        foreach (var line in fileContent)
        {
            aL.Add(ParseString(line));
        }
        return aL;
    }
    
    // Разбиваем строки на токены
    private string[] ParseString(string s)
    {
        const char delimiter = '|';
        return s.Split(delimiter);
    }
    Ответ написан
    Комментировать
  • Как записать мнимую единицу?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Ответ написан
    Комментировать