Немного функциональности в C#
Простенькое:
-
public static int ToInt(this string value, int @default = 0)
-
{
-
int result;
-
return int.TryParse(value, out result)
-
? result
-
: @default;
-
}
Такая запись позволить получить результат вне зависимости от value.
И дальше возможно использовать так:
-
var i = "123".ToInt();
-
var j = "1qwerty".ToInt(100);
Чуть посложнее. Немного Linq.
Предположим, что у нас есть некоторое перечисление - IEnumerable и мы хотим произвести некоторые действия над ним без использования foreach. У каждого перечисления есть метод материализации списка - ToList, т.к. сам по себе IEnumerable - ленивый.
У класса List<T> есть метод ForEach, который позволяет производить некоторую операцию с каждым элементом списка, при этом не меняя сам список.
На вход метода подается делегат Action<T>, который можно передать либо в виде анонимной лямбда-функции, либо в виде определенного метода.
Как пример - каждый файл списка подвергается некой обработке и выводится сообщение о результате обработки.
-
files
-
.ForEach(
-
doc =>
-
{
-
_log.Info(string.Format("File: {0} processed", doc));
-
});
Теперь, предположим, что нам нужно произвести некую операцию с каждым элементом перечисления, при этом модифицируя само перечисление. Для этого используется метод Select. Простейший пример из MSDN:
При этом значения квадратов исходного перечисления не вычисляются мгновенно, а будут вычислены только тогда, когда будет произведено перечисление объекта при помощи метода GetEnumerator, либо при помощи foreach.
На этом пока все:)
