Pisząc przy użyciu LINQ chciałoby była to pierwsza rzecz jakiej mi brakowało. Bardzo często zdarzało mi się tworzyć zbiór obiektów poprzez LINQ, a następnie chciałem na każdym z nim wykonać jakąś operacje. Normalnie musiało by to wyglądać tak:
class TestObj
{
public TestObj(int value)
{
Value = value;
}
public int Value;
public void Operation()
{
System.Console.WriteLine(Value);
}
}
public void Test()
{
var obj_list = new[] { new TestObj(2), new TestObj(3), new TestObj(4),
new TestObj(5), new TestObj(6) };
var x = from obj in obj_list
where obj.Value < 5
select obj;
foreach (var obj in x)
obj.Operation();
}
Aby móc zapisać linie 20-24 w takiej postaci:
(from obj in obj_list
where obj.Value < 5
select obj).ForEach(obj => obj.Operation());
Potrzebujemy następującej metod rozszerzających:
public static class LINQExtensions
{
[System.Diagnostics.DebuggerStepThrough]
public static void ForEach(this IEnumerable enumerable, Action handler)
{
foreach (T item in enumerable)
handler(item);
}
}
Atrybut
[System.Diagnostics.DebuggerStepThrough]
zapewnia nam, że debagując nie wskoczymy w tą metodę. W przypadku, gdy za działanie metody jesteśmy pewni, zastosowanie tego atrybuty znacznie ułatwia debagowanie, sprawiając, że nie skaczemy jak głupi po kodzie.
Brak komentarzy:
Prześlij komentarz