Показаны сообщения с ярлыком C#. Показать все сообщения
Показаны сообщения с ярлыком C#. Показать все сообщения

вторник, 15 января 2019 г.

Максимально ограничивайте область Generic-а и не используйте в перегрузках методов

Вчера исправлял баг, проявил он себя весьма интересно. Но продемонстрировать его можно на достаточно простом примере:

static void Main(string[] args)
{
    Print(new[] { 1, 2, 3 });
    Console.ReadKey();
}

static void Print<T>(T t)
{
    Console.WriteLine(t);
}

static void Print<T>(IEnumerable<T> t)
{
    foreach (var item in t)
    {
        Console.WriteLine(item);
    }
}

воскресенье, 6 января 2019 г.

Синтаксический сахар yield return

На stackoverflow задали вопрос про yield return. Ну и т.к. пример для понимания что это за зверь написал, то пусть он и в этом блоге полежит. Под катом два примера, как реализовать класс реализующий IEnumerable или IEnumerable классически и при помощи yield return. Для тех кто не в курсе, foreach и методы Linq работают с классами реализующими эти интерфейсы.

воскресенье, 17 декабря 2017 г.

Изменение в данных и текущей команды во время отладки

Как видно из картинки, 10 меньше или равно 5. Под катом два способа отличных от редактирования картинки, которыми можно получить такой результат. Возможности эти старые, просто мне попался тут на днях человек не знающий про них.

понедельник, 27 ноября 2017 г.

[Xamarin] 2. Собираем приложения и делаем главное меню "Гамбургер"

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

[Xamarin] 1. Готовим среду

Есть идейка несложного приложения которое должно работать на Android и Windows Desctop. В нем не будет ничего выходящего за классические контролы ввода, поэтому для его реализации решил попробовать Xamarin. Заодно и на реальном, пусть  и небольшом, проекте поиграюсь с новой для меня технологией. О том что делаю и как постараюсь написать циклом статей. А то большинство информации по Xamarin на английском, а то что есть на русском или рассказывает какой он крутой или почему он не крутой.
Первая статья о том, что надо установить и настроить, чтобы эта вся штука завелась. Если у кого-то кто будет пытаться это повторить возникнут проблемы, скажите, поправлю доку.

среда, 12 октября 2016 г.

Получение имени метода вызвавшего текущий метод

В C# 6 появилось новое ключевое слово nameof которое позволяет получить строку с именем члена класса, что позволяет существенно упростить написание, например, реализации INotifyPropertyChanged. Зачем он нужен я писал вот здесь. Под катом, я покажу как упростить вызов метода OnPropertyChanged. Ну и покажу какой замечательный атрибут появился в .Net Framework 4.5 благодаря которому, даже nameof больше не нужно.

вторник, 14 июня 2016 г.

Поддержка C# 6.0 на Build Server

Столкнулся с проблемкой, что при создании Build Definition для нового проекта билд падает со странной ошибкой вида:
Extension\ExceptionExtension.cs (22, 0)
Unexpected character '$'
Как выяснилось, на TFS сервере нет студии 2015 и не умеет он билдить C# 6.0.
Под катом как полечить.

четверг, 21 апреля 2016 г.

XslCompiledTransform и OutOfMemoryException

Столкнулся с проблемой, что при использовании xslt преобразований возникает Out Of Memory, если входной XML файл имеет достаточно большой объем, а приложение в ресурсах ограниченно, например по тому, что работает в 32-х разрядной системе. Под катом способы, как с этим можно бороться.

пятница, 20 ноября 2015 г.

Как я отвечаю на вопросы

Эта публикация из серии ответы на вопросы с MSDN. Вот только на вопрос я уже ответил, но вот в топике был задан вопрос: "А как вы даете ответы?". Вопрос переформулирован мной, по ссылке он в полном виде можно сходить и посмотреть. Под катом я расскажу как я отвечал конкретно на оригинальный вопрос из топика и вообще как я действую столкнувшись с интересной проблемой.

среда, 8 июля 2015 г.

Подписаться на изменение DependecyProperty

Часто бывает, что есть некий потомок DependencyObject, у него есть DependencyProperty, а вот события сообщающего о том, что свойство изменилось нет. Я с такой ситуацией столкнулся при попытках отследить изменение актуальной ширины DataGridColumn. Ну и под катом, как это все можно провернуть.

вторник, 24 марта 2015 г.

Вставка HTML в буфер обмена

При работе с буфером обмена из C# выяснилось, что вставить туда HTML так, чтобы программы типа Word распознавали его не как текст, а именно как HTML не совсем просто, под катом пример.

пятница, 29 августа 2014 г.

Забавный баг при использовании Nuget Packages

Ранее, я уже писал про Nuget Packages. Сегодня С Виталиком наблюдали забавный баг. Есть две сборки: А и Б. Причем Б ссылается на А. С обычными ссылками, если сборка А ссылается на Сборку В, то и сборка Б должна ссылаться на сборку В. Но Nuget-ы не такие. В сборке А была ссылка на упоминавшийся в предыдущей статье NLog. В сборке Б такой ссылки не было, но это ведь не обычные ссылки, поэтому все работало. Потом понадобилась ссылка на NLog в сборке Б и его тоже добавили при помощи Nuget, вот только версия его оказалась выше. Все собирается, запускается, но при попытке вызвать из сборки Б метод сборки А все замечательно падает. Ну и картинка для наглядности.
Самое обидное, что все падало на вызове конструктора с неинформативной ошибкой вида: конструктор не может быть вызван...

пятница, 25 июля 2014 г.

C# 6.0

Ну что, вот и C# 6.0 не за горами. Судя по этой статье на MSDN кроме расширения async/await при обработке ошибок, все остальное синтаксический сахар. На мой взгляд, в некоторых случаях весьма не удачный. Расширяющие методы, это уже магия, а вот доступ к статическим свойствам и метода вообще по одному имени - жесть. Надеюсь весь этот сахар не приведет к ситуации:
Поживем, увидим... 

понедельник, 14 октября 2013 г.

Выгрузка файлов из ASP .Net приложения

Всякими Web-сервисами пользуюсь постоянно, но тут возникла задача, написать сервис, который сможет отдавать файлы в любые приложения. Нашел в интернете несколько решений, что то не заработало, что то заработало но с некоторыми проблемами, которые пришлось решать. Все что находил было на английском, поэтому пусть здесь полежит, вдруг еще кому пригодится.
Еще раз, стоит задача написать web-приложение, которое получив http запрос с параметром, по параметру определит, какой файл мне нужен и отдаст его именно как файл.

четверг, 5 сентября 2013 г.

"Медленные" свойства

Свойства, как правило, достаточно просты, но предлагаю сразу не переставать читать, а посмотреть на то, что будет подкатом.
А там будет общая информация о свойствах , но, самое главное будет о том, что делать, если свойство "медленное", т.е. на присвоение или чтение надо очень много времени.

воскресенье, 4 августа 2013 г.

Еще раз о шаблонах элементов

Я уже пару раз писал про шаблоны. Вот здесь, о том, как поменять внешний вид кнопки. А вот здесь, как в зависимости от свойств компонента можно подгружать разные шаблоны. Сегодня предлагаю посмотреть натягивание шаблонов на более сложный элемент управления, а именно на TreeView.

понедельник, 10 июня 2013 г.

Использование Nuget Packages на примере NLog

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

воскресенье, 14 апреля 2013 г.

Пример на сборку мусора

В пятницу зашел разговор о том, как увидеть работу сборщика мусора в действии. Ну и под катом, небольшой пример на эту тему.

понедельник, 28 января 2013 г.

О "всплывании" события изменения свойств

Итак, сегодня статья, опять навеяна форумами MSDN, а конкретно вот этим вопросом. Кто лениться ходить по ссылкам. Есть два класса, и один включается во второй. Если оба реализуют INotifyPropertyChanged, как сделать так, чтобы при измененнии свойств включенного класса, вызывалось событие изменения свойств класса включающего.

среда, 14 ноября 2012 г.

Как заставить async метод вести себя как синхронный

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