C# פונקציה לטיפול ב enum המוגדר כ flags ?
-
זה טוב לך?
בחיפוש זה עלה לי בתוצאה הראשונה אבל לא הצלחתי להבין מה הוא עושה שם
אולי יש לי חסר בידע בסיסי בעניין
אנסה להסביר מה ידוע לי ומה אני צריך ורוצה לעשות אולי זה יעזור לעזור לילדוגמה יצרתי enum של ימים כך
public enum Days { Sunday = 1, Monday = 2, Tuesday = 4, Wednesday = 8, Thursday = 16, Friday = 32, Saturday = 64 };
יש לי פונקציה שלדוגמה מקבלת ימים שבהם נקבע פגישה עם ....
לפעמים נקבע פגישה רק יום אחד באותו שבוע ולפעמים כמה ימים באותו שבוע,
הנה הפניות לפונקציהdailyPlanner(Days.Monday | Days.Monday | Days.Sunday); dailyPlanner(Days.Sunday);
וכאן יש לי שתי שאלות
אחת האם הדרך היחידה לקבל את זה בפונקציה הוא כ enum או שאפשרי כמספר?
ולשאלה העיקרית אני רוצה לבנות את גוף הפונקציה dailyPlanner שמקבלת את ה enum
איך אני בודק מה התקבל בפונקציה? האם Sunday לבד או גם Monday וכו'...
תודה על העזרהפורסם במקור בפורום CODE613 ב04/07/2016 23:20 (+03:00)
-
למה לך להסתבך עם ENUM?
במקום כך:dailyPlanner(Days.Monday | Days.Monday | Days.Sunday); dailyPlanner(Days.Sunday);
תכתב כך:
dailyPlanner(Days.Monday, Days.Monday, Days.Sunday); dailyPlanner(Days.Sunday);
וגוף הפונקציה יראה כך:
private static void dailyPlanner(params Days[] days) { // ... }
כך תוכל לקבל את הימים כמערך ולא תצטרך לחלץ אותם מתוך ערך בודד.
פורסם במקור בפורום CODE613 ב05/07/2016 07:50 (+03:00)
-
אבל רחמים, זה בשביל לחסוך לו להבין אותנו? או לחסוך לך להסביר?
גם אם הקוד שלך היה חוסך הוא לא במקומו כשהבן אדם אומר לא הבנתי איך עושים אתה אומר תמשיך לא להבין, העיקר הבעיה שלך סודרה...
ושנית הוא לא טוב: א. הוא מאפשר לשלוח ללא אף יום ב. הרי הימים לא נבחרים ע"י המתכנת בזמן עיצוב... וע"י קלט המשתמש אתה צריך להוסיף את הימים שנבחרו - יצירת List - אז מה הועלנו עם הparams... בEnum אתה חוסך לבדוק כפילויות אבל זה לא כ"כ הפואנטה.zvi good תמה אני מה לא הבנת בתשובות הכה מפורטות שלנו... ומה בוער לך לקבל כמספר ולא כEnum (אכן, אתה יכול! אבל למה)...
פורסם במקור בפורום CODE613 ב05/07/2016 10:58 (+03:00)
-
לדעתי הפתרון הזה יותר טוב מאשר ENUM, כי מן הסתם הוא מקבל את הימים הנבחרים מהמשתמש שבחר ימים בתוך ליסט-בוס, והכי קל זה להעביר לפוקנציה dailyPlanner את רשימת הנבחרים בליסט-בוס הנ"ל כרשימה או מערך, מאשר להמיר את כולם לערך ENUM.
אבל אם הוא עובד עם דטה-ביס ורוצה לשמור את הימים שנבחרו, אז בהחלט עדיף לשמור כENUM שהוא ערך בודד שמכיל הרבה ערכים מאשר לשמור רשימה בתוך המסד נתונים.@דוד ל.ט.
א. הוא מאפשר לשלוח ללא אף יום ב. הרי הימים לא נבחרים ע"י המתכנת בזמן עיצוב... וע"י קלט המשתמש אתה צריך להוסיף את הימים שנבחרו - יצירת List - אז מה הועלנו עם הparams... בEnum אתה חוסך לבדוק כפילויות אבל זה לא כ"כ הפואנטה.
א. אפשר להוסיף שורה כזו:
private static void dailyPlanner(params Days[] days) { if (days == null || days.Length == 0) throw new ArgumentException("days"); // ... }
ב. לא הבנתי "להוסיף את הימים שנבחרו - יצירת List" ? הימים הנבחרים נמצאים במערך שנקרא days אז מה הבעיה?
פורסם במקור בפורום CODE613 ב05/07/2016 11:31 (+03:00)
-
שימוש קלאסי ב Flags הוא במקרה של צורך בהעברת אוסף של הגדרות True\False שלא תלויות זו בזו לפונקציה מסוימת
כמו ב MessageBox לדוגמה, מה יהיה האייקון והאם ייושר לימין וכו', זה קריא, פשוט וחסכוני.
ל Enum שלא מוגדר כ Flags יש עוד שימושים כמו הגבלת קלט לפונקציה.הגישה של למה להסתבך ממש מעצבנת אותי, מתכנת צריך לשאוף להכיר כל אבן מאבני הבנין של התכנות על בוריה, ואחר כך מתוך עמדה של ידע להחליט במה להשתמש ובמה לא.
פורסם במקור בפורום CODE613 ב05/07/2016 11:55 (+03:00)
-
הגישה של למה להסתבך ממש מעצבנת אותי, מתכנת צריך לשאוף להכיר כל אבן מאבני הבנין של התכנות על בוריה, ואחר כך מתוך עמדה של ידע להחליט במה להשתמש ובמה לא.
הבטחתי בלי נדר שאני לא מעלה את הנושא של דת ומדינה כדי לראות האם אני תמיד אשם בויכוחים הללו, והנה זה הגיע :lol: :lol: :lol:
כבר כתבו גדולי המדינאים אפלטון וגם מקיאוולי שמדינה שאין בה דת תקרוס מעצמה.
פורסם במקור בפורום CODE613 ב05/07/2016 13:34 (+03:00)
-
@דוד ל.ט.
רחמים, פתח אשכול חדש.עם איזה נושא?
בנושא: "פונקציה שמקבלת כמה ערכי Enum, לדעתי עדיף סוג מערך מאשר קומבינציית הערכים יחד".
בהודעה תסביר למה.
זה לא קשור לנושא האשכול: איך משתמשים בEnum, הנושא זה עדיין רלוונטי וממילא עדיף לא לסטות ממנו.פורסם במקור בפורום CODE613 ב05/07/2016 15:03 (+03:00)