ראינו פעם שעברה שאפשר לקבל את כל הערכים של Enum מסוים בעזרת הפונקציה Enum.GetValues.
מי שיציץ בReflector על הפונקציה הזאת יגלה מספר דברים מעניינים:
החיסרון העיקרי כאן הוא שמוחזר לנו מערך של object ואנחנו צריכים לבצע הסבה לטיפוס של הEnum שלנו, מה שגורר Boxing ויכול להשפיע על הביצועים בצורה משמעותית, במידה ואנחנו קוראים לפונקציה זו מספר רב של פעמים.
פתרון אפשרי לבעיה זו הוא ליצור מחלקה סטטית גנרית שתכיל לנו את הערכים האלה לכל Enum בצד:
|
|
שימו לב שנוצרת מחלקה סטטית עבור כל סוג Enum שנכניס במשתנה הגנרי (ראו גם טיפ מספר 177).
בנוסף, שימו לב כי שמנו Constraint שTEnum הוא Value Type ומממש IConvertible, זאת מאחר ואי אפשר להכריח בConstraint שמשתנה גנרי הוא Enum. (ראו גם טיפ 29)
הדבר הזה מאפשר לנו לקבל בצורה יותר מהירה, בלי Boxing מערך שהוא Type safe של הערכים של הEnum שביקשנו.
המשך יום גנרי ערכי סטטי.