DCSIMG
זהירות עם הפעלת += על int? או חיבור שני int? - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

זהירות עם הפעלת += על int? או חיבור שני int?

 

מה דעתכם על הקוד הבא :

    int? i = null;

    i += 10;

    Console.WriteLine(i);

 
אני הייתי בטוח שזה ידפיס 10, אבל מסתבר שהערך של i נשאר ב - null, וזה גם מתואר ב - MSDN
 

    int? d = null;

    int? r = 10;

 

    r = r + d;

    Console.WriteLine(r);

r חוזר להיות null.
 
 
ההתנהגות הזאת היא פתח לבאגים, באופן אישי עד שלא נתקלתי בהתנהגות הזאת, הייתי בודק האם HasValue רק כשרציתי להוציא ערך אבל מהיום אני יודע שאני צריך לכתוב ככה: 
 

    if (i.HasValue)

    {

        i += 10;

    }

    else

    {

        i = 10;

    }

 
או :

    i = i.GetValueOrDefault() + 10;

 
או :

    i = i ?? 10;

פורסם: Jun 12 2009, 08:00 AM by Shlomo | with 6 comment(s)
תגים:, ,

תוכן התגובה

Shlomo כתב/ה:

נכון, אבל כשמישהו כותב =+ 10 גם הערך null הוא מתכוון שזה יהיה שווה ל - 10, אז זה יכל להיות בצורה אוטומטית

# June 12, 2009 2:21 PM

אריאל בן חורש כתב/ה:

אם אני לא טועה השורה האחרונה היא טעות:

i = i ?? 10;

צריך להיות

i = (i ?? 0) + 10;

# June 15, 2009 1:11 PM

Shlomo כתב/ה:

נכון, תטדה על התיקון

# June 15, 2009 1:50 PM

אלכס כתב/ה:

בעיקרון גם ב Sql Server

NULL+something = NULL

ויש את הטעות הנפוצה של לבצע SUM על עמודה שיש בה רשומות עם NULL בשדה - ואז כל ה SUM הוא NULL .

אני מניח שהתפיסה הזאת הגיעה מה SQL ..

# June 15, 2009 6:01 PM

שלמה גולדברג כתב/ה:

כתבתי על זה בעבר אבל שוב נתקלתי בזה, שימו לב לקוד הבא class MyClass { public int id; public int ? data;

# December 16, 2009 10:56 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 6 and 4 and type the answer here:


Enter the numbers above: