דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. חדשות
  4. מה חדש בNET 6 LINQ.

מה חדש בNET 6 LINQ.

מתוזמן נעוץ נעול הועבר חדשות
3 פוסטים 2 כותבים 348 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רפאלר מנותק
    רפאלר מנותק
    רפאל
    כתב ב נערך לאחרונה על ידי רפאל
    #1

    הגירסה החדשה של NET. תוכרז במהלך החודש הבא באירוע NET Conf 2021 היוקרתי של מיקרוסופט, היא תכלול שיפורים רבים במגוון מחלקות, אחת מהיותר מעניינות שבינהן היא Enumerable, מספר מתודות Linq חדשות התווספו למחלקה, לצד הוספת Overloads חדשים עבור מתודות קיימות.

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

    1. Chunking
      אם יצא לכם לעבוד עם מבני נתונים גדולים, ודאי נתקלתם בצורך לחלק אוסף גדול למספר אוספים קטנים, בדיוק בשביל זה נולדה המתודה Chunk, המתודה מקבלת כפרמטר את הגודל הרצוי ומחזירה IEnumrable של תתי מערכים:
    public static IEnumerable<TSource[]> Chunk<TSource>(this IEnumerable<TSource> source, int size);
    
    
    private record Person(int Age) 
    
    int chunkSize = 10; 
    
    IEnumerable<Person> largeCollecton = Enumerable.Range(0, 1_000).Select(age => new Person(age));
    
    IEnumerable<Person[]> chunks = largeCollecton.Chunk(chunkSize);
    
    foreach (var chunk in chunks) 
    {
        foreach (var person in chunk)
        {
            Console.WriteLine(person);
        }
    }
    
    1. MaxBy\MinBy
      המתודה מאפשרת לקבוע את האובייקט הגדול\הקטן באוסף ע"פ המאפיינים של האוביקטים, בשונה מMax\Min הוותיקים שמבצעים את ההשוואה מול האוביקטים עצמם.
      לדוגמא: אם נרצה לקבוע מיהו האדם המבוגר באוסף של מופעים מסוג Person, נבצע את המשימה כך: people.MaxBy(x => x.Age) , עד כמה שהדבר מוזר, האפשרות טרם הייתה קיימת עד כה, הדרך המקובלת הייתה השילוב הלא חביב דלהלן:
      ()people.OrderByDescending(x => x.Age).First.
      כמו כן נוספו: DistinctBy ,ExceptBy ,IntersectBy וUnionBy בעלי עיקרון דומה.

    2. תמיכה בRange
      מכירים את Range מC# 8? עד היום התמיכה הייתה בלעדית למערכים, מעתה התמיכה מתרחבת לLinq, לדוגמא: people.Take(6..10) יחזיר ארבעה אובייקטים, מהאובייקט במיקום השישי עד האובייקט במיקום העשירי (מקביל לpeople.Skip(6).Take(4)).

    3. ערך דיפולטיבי עבור SingleOrDefault ,LastOrDefault ,FirstOrDefault
      המתודות הנ"ל יקבלו Overload חדש התומך בערך ברירת מחדל.
      בדוגמא דלהלן אנו ננסה למצוא באוסף מסוג Person, אדם שגילו הוא חמישים, ונחזיר מופע חדש (המצייג אדם שגילו הוא 50) במידה וניכשל:

    people.FirstOrDefault(m => m.Age == 50, new(){ Age = 50 })
    
    1. Zip עבור שלושה Enumrables
      כיום התמיכה מוגבלת עבור שניים בלבד.

    2. TryGetNonEnumeratedCount
      המתודה תנסה לקבוע את מספר האוביקטים בEnumrable מבלי לבצע איטרציה (פעולה העשויה להיות יקרה), כחלק מהתהליך המתודה תבדוק האם הEnumerable מממש את ICollection (המכיל מאפיין בשם Count), או לחילופין האם הוא מערך (המכיל מאפיין בשם Length).

    מקווה שנהנתם מהפוסט ושמצאתם אותו כשימושי, בהצלחה.

    OdedDvirO תגובה 1 תגובה אחרונה
    7
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      השיב לרפאל ב נערך לאחרונה על ידי
      #2

      @רפאל סקירה מצויינת, כתיבה מקצועית וברורה, נהניתי מאד, תודה רבה

      רפאלר תגובה 1 תגובה אחרונה
      5
      • רפאלר מנותק
        רפאלר מנותק
        רפאל
        השיב לOdedDvir ב נערך לאחרונה על ידי
        #3

        @odeddvir תודה רבה על הפרגון

        תגובה 1 תגובה אחרונה
        1

        בא תתחבר לדף היומי!
        • התחברות

        • אין לך חשבון עדיין? הרשמה

        • התחברו או הירשמו כדי לחפש.
        • פוסט ראשון
          פוסט אחרון
        0
        • דף הבית
        • קטגוריות
        • פוסטים אחרונים
        • משתמשים
        • חיפוש
        • חוקי הפורום