157. DefaultIfEmpty extension method

לפעמים יש לנו אוסף, ואנחנו מעוניינים שתמיד יהיה בו איזשהו איבר.

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

מסתבר שיש Extension Method בשם DefaultIfEmpty שמחזיר לנו את האוסף במידה והוא לא ריק, ואחרת את הDefault:

1
2
3
4
IEnumerable<int> enumerable = new[] {4, 8, 15, 16, 23, 42};
IEnumerable<int> otherEnumerable =
enumerable.DefaultIfEmpty(); // otherEnumerable == enumerable

במידה והאוסף ריק:

1
2
3
4
5
6
IEnumerable<int> enumerable = new int[] {};
IEnumerable<int> otherEnumerable =
enumerable.DefaultIfEmpty();
Console.WriteLine(otherEnumerable.First()); // 0

קיים גם Overload שמאפשר לנו להגדיר את אותו הDefault (ולאו דווקא להשתמש בdefault(T)):

1
2
3
4
5
6
IEnumerable<int> enumerable = new int[] {};
IEnumerable<int> otherEnumerable =
enumerable.DefaultIfEmpty(5);
Console.WriteLine(otherEnumerable.First()); // 5

שימו לב שאפשר להשתמש בזה כדי לקבל Default אחר במקום להשתמש בפונקציות ששמן מסתיים בOrDefault (ראו גם טיפ מספר 154):

1
2
3
IEnumerable<int> enumerable = new int[] {};
int value = enumerable.DefaultIfEmpty(5).First(); // 5

לעומת:

1
int value = enumerable.FirstOrDefault(); // 0

סוף שבוע ראשון (אבל לא דיפולטי) אחרי פסח טוב

שתף