בפעם הקודמת הכרנו מעט את IEqualityComparer
דוגמא נחמדה היא הבאה:
נניח שאנחנו רוצים לגשת לערכים לDictionary שהמפתחות שלו הן מחרוזות, אבל ללא case sensitive.
|
|
עד היום היינו עושים את זה כך:
הכנסה לDictionary:
|
|
הוצאה מהDictionary:
|
|
מה הבעיה פה? כמו בטיפ מספר 5, בכל פעם שאנחנו ניגשים לDictionary, אנחנו בעצם יוצרים אובייקט חדש (ע"י קריאה לToUpper).
כלומר כל גישה יוצרת אובייקט חדש, וזה אובייקט מבוזבז – מבזבז לנו זמן (ביצירה) וזכרון.
במקום, נוכל להיזכר בקיומם של
וכעת נוכל לגשת לDictionary בשיטה הרגילה
|
|
בלי ליצור אובייקט חדש בכל גישה לDictionary.
הערה: המימוש של אתמול של StringIgnoreCaseSensitiveComparer דווקא כן יוצר אובייקט חדש בכל גישה לDictionary, כי אנחנו קוראים בGetHashCode לToUpper. נראה בהמשך דרך אחרת להשתמש בEqualityComparer שמתעלם מCase sensitive, ולא יוצר אובייקט חדש בכל גישה.
המשך שבוע שווה