Немного функциональности в C#

Hes 2014 M05 20
465
0
0
0

Простенькое: public static int ToInt(this string value, int @default = 0) { int result; return int.TryParse(value, out result) ? result : @default; } Такая запись позволить получить...

Простенькое:

   
  1. public static int ToInt(this string value, int @default = 0)
  2. {
  3. int result;
  4. return int.TryParse(value, out result)
  5. ? result
  6. : @default;
  7. }

Такая запись позволить получить результат вне зависимости от value.

И дальше возможно использовать так:

   
  1. var i = "123".ToInt();
  2. var j = "1qwerty".ToInt(100);
 

Чуть посложнее. Немного Linq.

Предположим, что у нас есть некоторое перечисление - IEnumerable и мы хотим произвести некоторые действия над ним без использования foreach. У каждого перечисления есть метод материализации списка - ToList, т.к. сам по себе IEnumerable - ленивый.

У класса List<T> есть метод ForEach, который позволяет производить некоторую операцию с каждым элементом списка, при этом не меняя сам список.

На вход метода подается делегат Action<T>, который можно передать либо в виде анонимной лямбда-функции, либо в виде определенного метода.

Как пример - каждый файл списка подвергается некой обработке и выводится сообщение о результате обработки.

   
  1. files
  2. .ForEach(
  3. doc =>
  4. {
  5. _operations[key].Execute(doc);
  6. _log.Info(string.Format("File: {0} processed", doc));
  7. });
 

Теперь, предположим, что нам нужно произвести некую операцию с каждым элементом перечисления, при этом модифицируя само перечисление. Для этого используется метод Select. Простейший пример из MSDN:

   
  1. IEnumerable<int> squares = Enumerable.Range(1, 10).Select(x => x * x);
 

При этом значения квадратов исходного перечисления не вычисляются мгновенно, а будут вычислены только тогда, когда будет произведено перечисление объекта при помощи метода GetEnumerator, либо при помощи foreach.

На этом пока все:)

 

Оцените пост

-9