Хорошая статья о том как применять форматирование строк при байндинге в WPF:
http://blogs.msdn.com/.../trying-out-binding-stringformat.aspx
четверг, 24 июня 2010 г.
вторник, 1 июня 2010 г.
Директивы ASP.NET Pages
На сайте GotDotNet натолкнулся на интересную статью. Был прятно удивлен, что оказывается можно в странице указать какая именно мастер пейдж используется и как следствие, получить доступ к её свойствам. А я делал приведение типов...
вторник, 22 сентября 2009 г.
Любимые extension methods
Расширения для событий:
static void Fire<T>(this EventHandler<T> handler, object sender, T eventArgs) where T : System.EventArgs
{
if (handler != null)
handler(sender, eventArgs);
}
public static void Fire(this EventHandler handler, object sender, System.EventArgs eventArgs)
{
if (handler != null)
handler(sender, eventArgs);
}
Расширения для коллекций:
public static bool IsEmpty<T>(this ICollection<T> list)
{
return list == null || list.Count == 0;
}
public static void Foreach<T>(this IEnumerable<T> collection, Action<T> action)
{
if (collection != null)
foreach (var item in collection)
action(item);
}
Расширения для строк:
public static int ToInt(this string value)
{
int i;
int.TryParse(value, out i);
return i;
}
public static bool IsEmpty(this string value)
{
return string.IsNullOrEmpty(value);
}
public static bool PoorEquals(this string value, string value2)
{
return value != null && value2 != null && value.Equals(value2, StringComparison.InvariantCultureIgnoreCase); }
понедельник, 21 сентября 2009 г.
.NET 3.5: Quick start или как раскрутить директора.
- Посмотрел документы.
- Нужно написать эту систему. Наша часть - только юай + контроллеры. База - на каше в Америке. Сервисы нам будут предоставлены.
- Как на счёт использования .NET 3.5?
- А зачем он вам? Entity framework все равно использоваться не будет.
Именно с этого диалога я начну рассказ о том, какую пользу принесет использование .NET 3.5 в проектах без использования Entity Framework.- Нужно написать эту систему. Наша часть - только юай + контроллеры. База - на каше в Америке. Сервисы нам будут предоставлены.
- Как на счёт использования .NET 3.5?
- А зачем он вам? Entity framework все равно использоваться не будет.
Пример номер раз (методы-расширения):
Как часто приходится писать подобный код:string value = Request.Params["VacancyID"];
int id;
int.TryParse(value, out id);
ViewCandidate(id);value.ToInt()public static int ToInt(this string value)
{
int id;
int.TryParse(value, out id);
return id;
}string value = Request.Params["VacancyID"];
ViewCandidate(value.ToInt());Примеры удобных расширений:
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
return list == null || list.Count() == 0;
}
public static void Fire<TEventArgs>(this EventHandler<TEventArgs> eventHandler, object sender, TEventArgs e) where TEventArgs : System.EventArgs
{
if (eventHandler != null)
eventHandler(sender, e);
}Пример номер два (неявно типизированные переменные):
Подобный код встречается реже, но тоже бывает:IDictionary<CandidateFilter, IList<CandidateState>> cf = new Dictionary<CandidateFilter, IList<CandidateState>>()
var cf = new Dictionary<CandidateFilter, IList<CandidateState>>()
var i;
var k = null;Пример номер три (анонимные типы):
Иногда появляется необходимость создать временный класс, сущность которого сводится только к набору полей. С появлением неявного типизирования, появилась возможность добавить анонимные типы - типы, для которых классы создаются в процессе выполнения программы. Теперь можно написать вот так:var c = new { User = currentUser, DateTime = DateTime.Now };
Console.WriteLine(c.DateTime);
Console.WriteLine(c.User.Name);Пример номер четыре (авто свойства):
В классах доменой модели часто можно встретить подобный код:class User
{
private string _firstName;
private string _lastName;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
}class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}Пример номер шесть (лямбда выражения):
В библиотеке System.Core объявлены следующие универсальные делегаты:public delegate TResult Func<T1 arg1, T2 arg2, T3 arg3, T4 arg4>; public delegate TResult Func<T1 arg1, T2 arg2, T3 arg3>; public delegate TResult Func<T1 arg1, T2 arg2>; public delegate TResult Func<T1 arg1>;
Пусть в приложении необходимо использование следующего выражения:
Func<CandidateState, int> func = delegate(CandidateState state)
{
return (int)state;
};Func<CandidateState, int> func = state => (int) state;При необходимости можно использовать и несколько параметров:
Func<int,int,int> f = (x, y) => x + y;DirectoryInfo appThemes = new DirectoryInfo(Page.MapPath("~/App_Themes"));
if(appThemes.GetDirectories().Where(d => d.Name == theme).Count() > 0)
...
Подписаться на:
Сообщения (Atom)