מדריך LINQ – כתיבת קוד שמדמה LINQ

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

static List<int> Filter(List<int> source, Predicate<int> prediacte)
{
    var newList = new List<int>();
 
    foreach (var item in source)
    {
        if (prediacte(item))
            newList.Add(item);
    }
 
    return newList;
}

והשימוש בה יהיה כך:

List<int> list = Enumerable.Range(0, 50).ToList();
var evenList = Filter(list, x => x % 2 == 0);

כמו שאפשר לראות השתמשנו במתודה ושלחנו אליה את האובייקט המקורי ומימוש ל Lambda Expressions ל – Prediacte (אמורה לקבל פונקציה שתקבל T ותחזיר bool)
אם נרצה להיות יותר חכמים נגדיר את Filter כ – Extension Methods לכל List static List<int> Filter(this List<int> source, Predicate<int> prediacte) { //.... } var evenList = list.Filter(x => x % 2 == 0);

וזה בעצם מה שקרה – הוגדרו מספר רב של Extension Methods לאובייקט:

IEnumerable<T>

ולכן כל האוספים יכולים להשתמש במגוון רחב של מתודות חדשות. לדוגמא

if (list.Any(x => x == 10)) { }

כדי לבדוק האם יש ברשימה את הערך 10. דוגמא נוספת:

var evenIdsAsString = list.Where(x => x % 2 == 0)
                          .Select<int, string>(x => x.ToString());

מוציא מהרשימה את כל המספרים הזוגיים וממיר אותם למחרוזת, מה שבסופו של דבר יחזיר לי רשימה חדשה של מחרוזות עם מספרים זוגיים.
ובעזרת רשימת המתודות ניתן לכתוב קוד נקי ופשוט יותר.


פורסם במקור בבלוג של שלמה גולדברג (הרב דוטנט) – מרצה ויועץ במכללת סלע

תגיות: ,

תגובות בפייסבוק

חדש! אחסון אתרים של וובמאסטר

שירות אחסון אתרים
המקצועי של וובמאסטר!

מומחים באירוח אתרי
WordPress, Joomla, Drupal

  • שרתי לינוקס עם CloudLinux, LiteSpeed
  • 1GB דיסק SSD, 10GB תעבורה חודשית
  • ממשק ניהול cPanel, תעודת SSL חינם

עכשיו במחיר היכרות:
רק 420 ש"ח לשנה!