70. Extension methods meet lambda expressions

בהמשך לשבוע המורחב הטוב,

אחד הדברים שמסתבר שמשתלבים טוב יחד, הם Extension Methods וLambda Expressions.

נניח שאנחנו מעוניינים ליצור פירמידת נקודות, משהו שנראה ככה:

*
**
***
****

הדרך המסורתית לעשות זאת היא ליצור לולאה מקוננת.

דרך מעט יותר מגניבה לעשות זאת היא כך: אנחנו נגדיר Extension Method כזה:

1
2
3
4
5
6
7
8
public static void Times(this int number,
Action action)
{
for (int i = 1; i <= number; i++)
{
action();
}
}

ואף כזה:

1
2
3
4
5
6
7
8
public static void Times(this int number,
Action<int> action)
{
for (int i = 1; i <= number; i++)
{
action(i);
}
}

זהו Extension Method לint שקורא לdelegate שהוא מקבל בהתאם למספר הפעמים שהתקבל.

נשמע מסובך? בוא נראה מספר דוגמאות:

הדפסת המשפט I will do my homework עשר פעמים:

1
10.Times(() => Console.WriteLine("I will do my homework"));

הדפסת כל המספרים עד המספר 10:

1
10.Times(x => Console.WriteLine(x));

דוגמא נוספת:

ציור פירמידה בגודל 10:

1
2
3
4
5
10.Times(row =>
{
row.Times(() => Console.Write("*"));
Console.WriteLine();
});

סופ"ש מורחב טוב

שתף