Tuesday, May 11, 2010

Использование неявно типизированных переменных в C#

Ещё в C# 3.0 появилась довольно интересная фича — неявная типизация переменных. При объявлении переменной мы можем не задавать явно её тип — его определит компилятор. В основном это будет полезно при использовании анонимных типов и LINQ-запросов, но абсолютно ничего не мешает нам использовать её и в обычном коде:
int i = 42; // явное задание типа
var j = 42; // неявное задание типа
В примере выше переменная j будет типа int точно так же, как и i. При желании можно легко в этом убедиться, заглянув в MSIL:
IL_0000:  nop
IL_0001:  ldc.i4.s   42
IL_0003:  stloc.0
IL_0004:  ldc.i4.s   42
IntelliSense в Visual Studio также без проблем разбирается с неявно типизированными переменными:
Оператор var
можно использовать как в циклах for, так и в объявлениях using. Но по-настоящему он пригодится, когда мы возпользуемся анонимными типами, например, в LINQ-запросе. В таком случае, наша переменная может быть объявлена только через идентификатор var, потому что внутреннее название сгенерированного анонимного типа будет известно только компилятору:
struct SomeStruct
{
    public int a;
    public int b;
    public int c;
}
static void Main(string[] args)
{
    int[] numbers = new[] { 0, 1, 2, 3, 4, 5 };
    // здесь использование var необязательно - мы можем использовать
    // вместо него явно заданный IEnumerable
    var numberQuery = from number in numbers
                      where number > 1 && number <= 4
                      select number;
    // так как numberQuery - объект неанонимного типа, в foreach можно
    // использовать явно типизированный итератор
    foreach (int i in numberQuery)
    {
        Console.WriteLine(i.ToString());
    }

    SomeStruct[] structures = new[] {
        new SomeStruct { a=1,b=2,c=3},
        new SomeStruct { a=3,b=4,c=5},
        new SomeStruct { a=7,b=8,c=9},
    };

    // результат этого запроса - коллекция экземпляров анонимного типа.
    // в данном случае использование var обязательно.
    var structQuery = from structure in structures
                      where structure.a <= 3
                      select new { NewA = structure.a, NewB = structure.b };
    // опять же, из-за анонимности типа в LINQ-запросе, мы не можем явно
    // указать тип итератора, поэтому обязательно использовать var.
    foreach (var j in structQuery)
    {
        Console.WriteLine(String.Format("NewA={0},NewB={1}", j.NewA, j.NewB));
    }
}

Итак, неявно типизированные переменные и идентификатор var  — отличное средство улучшения читабельности и лёгкости написания кода (сравните var someQuery и IEnumerable<somelongandnastytype> someQuery !) и незаменимое решение при использовании анонимных типов.

Implicitly Typed Local Variables (C# Programming Guide)
Anonymous Types (C# Programming Guide)

Saturday, May 1, 2010

Презентация и код со сбора .NET User Group

Windows Phone на Imagine Cup 2010

На студенческом технологическом конкурсе Imagine Cup 2010 объявлена номинация по Windows Phone 7! Всё, что от вас требуется — зарегистрироваться командой до четырех человек и в до 24 мая представить общественности ваше Windows Phone 7-приложение. Каким оно будет — решать вам;)
Призы, надо сказать, очень и очень интересны:
Award Finalists receive:
  • First Prize: $8,000 USD, a trip to the Worldwide Finals in Warsaw, Poland from July 3–8, 2010, and a Windows Phone for each team member.
  • Second Prize: $4,000 USD and a Windows Phone for each team member
  • Third Prize: $3,000 USD and a Windows Phone for each team member
Так что, если вы ещё студент, а также соответствуете остальным условиям участия, удачи!
Imagine Cup — Windows Phone 7 «Rockstar» Award

Обновление Windows Phone Developer Tools

Вчера в центре разработки Windows Phone была выложена новая версия инструментов разработки Windows Phone Developer Tools. Давайте же посмотрим, что нового:
  • Совместимость с финальной версией Visual Studio 2010;
  • Обновлённый образ Windows Phone 7 OS для эмулятора;
  • Изменения в API и документации (подробнее о них в другой раз);
  • Поддержка в эмуляторе (пока ограниченная) диалогов запуска и выбора (Launchers and Choosers);
  • Поддержка событий Pause/Resume;
  • Возможность использования эмулятора не-административными пользователями компьютера;
  • Исправления багов.
Советы по установке новой версии Windows Phone Developer Tools:
  • Удалите перед установкой предыдущую версию инструментов разработки (Установка/удаление приложений → Microsoft Windows Phone Developer Tools CTP-ENU);
  • Если у вас установлен релиз-кандидат Visual Studio 2010, удалите его перед установкой Developer Tools и установите финальную версию VS2010;
    • С другой стороны, вам не требуется установленная Visual Studio для того, чтобы установить Windows Phone Developer Tools.
В следующем посте мы посмотрим на изменения в API и попробуем в деле новую версию эмулятора.
Источник: Windows Phone Developer Tools Refresh!
Загрузить апрельское обновление Windows Phone Developer Tools