17-10-2010, 09:00
|
|
|
|
חבר מתאריך: 07.12.09
הודעות: 7,072
|
|
קודם כל ב .NET גם גודל של מערך, וגם טיפוסים לגנריים מוגדרים בזמן ריצה.
הבנתי מה אתה רוצה לעשות.... אתה רוצה להחליט על הטיפוס בזמן ריצה, ובכל זאת לעבוד עם ג'נריקס, אז אתה לא יכול. כי תכלס הטיפוס נוצר בזמן ריצה, אבל הקומפיילר בודק מה אתה עושה בזמן קומפילציה, והוא מאפשר לך להעביר רק Type Arguments ולא מופעים של טיפוס.
מה שאתה יכול לעשות זה ככה :
1. להשתמש ב Object ולהתעסק איתו באמצעות ריפלקשנס.
2. ליצור רשימה מטיפוס Enum שזה מחלקת הבסיס לכל האנומרציות, ולהשתמש בה, זה יותר פשוט מריפלקשנס ויתן לך לעשות את רוב הדברים שאתה צריך לדעתי.
3. האפשרות הזאת הכי כואבת:
קוד PHP:
Type newType = typeof(List<>).MakeGenericType(new Type[] { typeof(int) });
עכשיו מה שהקוד הזה בעצם עושה זה יוצר בזמן ריצה את הטיפוס
ואתה יכול לעשות את זה לכל טיפוס תכלס, אבל מרגע שעשית את זה, להשתמש בזה זה מאוד בעייתי.
אני ממליץ על האפשרות השניה.
אתה רוצה להגיד מה אתה תכלס מנסה לעשות? כי נראה לי שאתה מאוד מסתבך בישביל משהו פשוט...
|