למה DataRow לא מממש IDictionary?

gewitter

New member
למה DataRow לא מממש IDictionary?

[מדובר ב-.net] נכון, IDictionary מצהיר על מתודה Add שלא מתאימה ל-DataRow שהסכמה שלה כבר נקבעה ע"י הטבלה. אז אפשר לשאול בנוסף: למה אין ממשק לקריאה בלבד של אובייקטים על-פי מפתח? השאלה עלתה עקב מימוש של חלוקת שורות ב DataTable לקבוצות, לפי ערכים מסוימים ב-DataRow. כל קבוצה מוגדרת ע"י קריטריון לערכים מסוימים. למשל אם זו טבלת לקוחות, אני מגדיר שאם שם הלקוח מכיל את המילה מיקרוסופט, השורה תשתייך לקבוצה אחת, ואם הלקוח משלם מעל אלף ש"ח בחודש, השורה שייכת לקבוצה אחרת (יש עדיפויות כדי למנוע התנגשות). אז בנתיים יש לי מתודות שמקבלות DataRow ומחזירות true/false אם השורה מתאימה או לא לקריטריון. אבל המתודות האלה לא צריכות לדעת שזה DataRow. הן רק צריכות לבקש ערכים מסוימים לפי אינדקס מחרוזתי ולבדוק אותם. מעניין אותי אם יש סיבה, משהו שהיה גורם לעיצוב ספריות .net להתחרבש לגמרי, אם היו מוסיפים IReadOnlyDictionary (אפשר לטעון שהספריות גם ככה מחורבשות, אבל זה לא יעזור
)
 

עידו פ

New member
-->

1. אני לא חושב שיש כאן מישהו שעובד במיקרוסופט ויכול לומר לך למה, אבל התשובה הדי ברורה היא "זה מה יש, זבשך". גם אני תהיתי לא פעם מדוע מיקרוסופט לא החכימו לעשות כשיצא 2.0 #C ולשנות את הצורה בה TDS נבנה על-מנת לאפשר לו לעבור עם nullable values (והאמת שכשאלתי את השאלה בתמיכה של מיקרוסופט הם סגרו את הפניה בטוענה שזה לא יתוקן). 2. אומנם התשובה יותר מתאימה להתפרסם בפורום דוטנט, אבל השאלה לא נשאלה שם. בכל אופן - אתה יכול להוסיף ל-data table עמודות מחושבות (expression column) שמחזירות true/false עפ"י ביטוי מסוים (משפט Like זה משהו די בסיסי ל-expression column). על זה, אתה יכול להגדיר dataview שמכיל רק את השורות שבהן ה-expr col מכיל true, ומשם לבדוק קיום רשומה ב-dataview (או ב-array) זה די פשוט. 3. אל תשכח שביכולתך לרשת מ-dataset וליישם בעצמך את העבודה עם IDictionary (תקרא לזה dds)
 
למעלה