@dovid אני רואה שזה לא פשוט להתעסק אתך..
(בכלל, אני מתחרט שנכנסתי לבוץ הזה
)
@dovid אמר באלגוריתם: סינון מערך (#C):
אשמח שתספק לי קוד שמביא את התוצאה שביקשת, בלי טיפול בnull כלומר באופן בו max היה נכשל.
זה הקוד:
var testList = new[]
{
new { id = 1, version = 1},
new { id = 1, version = 5},
new { id = 2, version = 4},
new { id = 3, version = 3},
new { id = 3, version = 2},
new { id = 3, version = 1},
new { id = 1, version = 12},
new { id = 1, version = 155},
null
};
int max;
// Test 1
try
{
max = testList.Where(x => x is not null).Max(x => x.id);
Console.WriteLine("test 1 succesed! max is: " + max);
}
catch (Exception ex)
{
Console.WriteLine("test 1 failed! " + ex.Message);
}
// Test 2
try
{
max = testList.Max(x => x is null ? 0 : x.id);
Console.WriteLine("test 2 succesed! max is: " + max);
}
catch (Exception ex)
{
Console.WriteLine("test 2 failed! " + ex.Message);
}
// Test 3
try
{
max = testList.Max(x => x.id);
Console.WriteLine("test 3 succesed! max is: " + max);
}
catch (Exception ex)
{
Console.WriteLine("test 3 failed! " + ex.Message);
}
וזה הפלט:
test 1 succesed! max is: 3
test 2 succesed! max is: 3
test 3 failed! Object reference not set to an instance of an object.
@dovid אתה צודק בטענה שהטעות היא בקוד של הפונקציה ומיקרוסופט לא היו צריכים לטפל בשגיאות שלי, אם כי זה לא סותר את ההווה אמינא שהייתה להם אפשרות למנוע זאת מראש ולא להריץ את פונקציית הבדיקה על אובייקט שהוא null.
אבל למסקנא פשוט שזה לא גישה נכונה להתערב למתכנת בבדיקות (ולדלג על אובייקטים שהם null), וזה ודאי שאיך שהם בנו את הפונקציה זה הכי הגיוני.
ובקשר לקוד, אני כבר יענה לעצמי במקומך שהבעיה היא לא נמצאת ב-Max אלא בקוד שלי. אני יודע את זה. אני רק ניסיתי לתת צד ולנסות להסביר את מה @Aharon-0 אמר.
אגב, תסתכל פה