א. יפה מאוד איך שאתה כותב.
ב. הבעיה היא כמו שsoft אמר, מבחינת הקומפיילר ישנם אפשרות לא מוכסה. כי כתבת אם... ואם לא, אז אם... וזהו. מבחינה לוגית יש פה חור למקרה נוסף. רק כמו שsoft אמר, האם השני מיותר. תזכור שבif else אין מצב בעולם ששני הבלוקים במוצעים. אם בוצע הבוק הראשון בגלל שyear היה שווה אפס, לא תהיה כניסה לבלוק הelse וממילא ההתניה year != 0 מיותרת.
ג. soft אמר שיש מתודות מוכנות לבעיה שלך. בעיקרון הפרש בין תאריכים מושג בקלות ע"י חיסור אחד בשני:
var hefresh = DateTime.Now - startDonor;
Console.WriteLine(hefresh.TotalDays);
השורה הראשונה מגידרה משתנה בשם hefresh שמקבל את חיסור התאריך הנוכחי בתאריך ההתחלה. התוצאה היא מסוג TimeSpan מחלקה שמייצגת "חתיכת זמן". יש לה מתודות רבות: כמה ימים כמה שעות וכו'. רק שאין לה מתודה לכמות החודשים. למה? ומה הבעיה לעשות ימים לחלק לשלושים? כי חודש זה לא שלושים יום אלא בערך, ומה שרוצים לדעת זה לא כמות ימים אלא כמה חודשים ממשיים עברו. ולכן צריך לבדוק כמו שעשית: כמה שנים יש כפול 12 חודשים וגם ההפרש בין תחילת וסוף השנה של התאריכים. הנה דוגמאות: http://stackoverflow.com/a/1526004/1271037 http://stackoverflow.com/a/4639057/1271037.
soft הצביע על מתודה של vb שיכולה להיקרא מC#, שעושה בדיוק את העבודה הזו (http://referencesource.microsoft.com/#Microsoft.VisualBasic/DateAndTime.vb,229), רק שצריך להוסיף בשבילה reference מה שנראה לי מיותר.
פורסם במקור בפורום CODE613 ב28/06/2015 13:03 (+03:00)

