Записи с тегом «век-живи-век-учись»
Нумерация записей коллекции средствами LINQ
Для получения индекса элемента коллекции в LINQ существует специальная версия метода Select():
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_Indexing
{
class Program
{
static void Main(string[] args)
{
var data = new string[] { "First", "Second", "Third" };
var dataWithIndex = data.Select((x, index) => new
{
Index = index,
Title = x
});
foreach (var item in dataWithIndex)
{
Console.WriteLine("{0} {1}", item.Index, item.Title);
}
}
}
}
Разбиение длинной команды на строки в командной строке Windows
В *nix'овских оболочках разбить длинную команду можно с помощью «\»:
ls \ -l
В Windows используется другой символ («^»):
C:\tools\curl\curl.exe ^
--request POST -d "{\"login\": \"user1\", \"password\": \"user1\" }" ^
http://example.com/auth/login/
В качестве примера — обращение к условному REST API.
Значение по умолчанию для select'а в ASP.NET MVC
Иногда возникает необходимость добавить в выпадающий список (<select />) ещё один пункт с пустым атрибутом value и примерно таким текстом: «выберите, пожалуйста, значение». Обычно такой пункт размещается в выпадающем списке первым. Специально для этого случая существуют специальные версии методов Html.DropDownList() и Html.DropDownListFor(), которые позволяют указать текст этого <option>'а следующим образом:
<%: Html.DropDownListFor(m => m.MyModelField, Model.ListOfOptions, "— не выбрано") %>
Массив массивов в PROGMEM для микроконтроллеров AVR
Когда совсем запутался с массивами массивов, хранимых во флеш-памяти микроконтроллера AVR решил набросать такую демку и проверить всё в симуляторе с отладчиком. Вроде бы разобрался, возможно, кому-нибудь ещё пригодится.
Особенно понравился доступ к массивам не так: a[2], а вот так: 2[a] (это работает для любых массивов в C) :)
Extension-методы для DataRow и DataTable
Долгое время использовал такую конструкцию если нужно было получить данные из нетипизированного DataRow:
var temp = Convert.ToInt32(row["SomeField"]);
В случае, когда нужно было обработать nullable-поля, то использовался вот такой метод:
/*
* Taken from: http://stackoverflow.com/questions/209160/nullable-type-as-a-generic-parameter-possible
*/
public static Nullable<T> GetValueOrNull<T>(DataRow row, string key) where T : struct
{
object columnValue = row[key];
if (!(columnValue is DBNull))
return (T)columnValue;
return null;
}
...
int? temp = GetValueOrNull<int>(row, "SomeField");
Оказалось, что есть более простой способ с использованием extension-метода Field<>():
int temp = row.Field<int>("SomeField");
Для класса DataTable есть свой набор полезных расширений
Встроенный String.Format() в inline-тегах ASP.NET
В одном скринкасте заметил интересный трюк.
Вместо такой записи:
<%= DateTime.Now.ToString("g") %>
можно написать:
<%= "{0:d}", DateTime.Now %>
А вместо:
<%= String.Format("Текущая дата: {0:d}, можно использовать числа, например: {1:0.#####}", DateTime.Now, Math.PI) %>
можно написать:
<%= "Текущая дата: {0:d}, можно использовать числа, например: {1:0.#####}", DateTime.Now, Math.PI %>
Трюк работает как для ASP.NET MVC так и для ASP.NET WebForms начиная с версии 2.0. Первоисточник в официальной документации пока не найден.
Небольшая оптимизация sprintf()
С помощью специальной записи строки формата можно немного укоротить запись вызова функции sprintf(). Например, вместо:
echo sprintf('Страница %d/%d (а всего страниц %d)', $current, $total, $total);
Можно использовать:
echo sprintf('Страница %1$d/%2$d (а всего страниц %2$d)', $current, $total);
Оператор присваивания в PHP
Результатом выражения присваивания является присваиваемое значение, что позволяет в некоторых случаях значительно сократить код.
