Cast from Generic type

23 באוקטובר 2011

תגיות: , ,
3 תגובות


 


אחד הדברים המפריעים בעבודה עם Generic Type, שאי אפשר לעשות להם casting לאובייקטים אחרים, לדוגמא:

 



static void MyFunc<T>(T item)


{


    Work((Entity)item);


}


 


static void Work(Entity item)


{


 


}


 

הקוד הא יזרוק שגיאה של:

 

Cannot convert type 'T' to 'ConsoleApplication1.Entity'

 

כדי לבצע בכל זאת המרה בין האובייקטים ניתן להשתמש ב – Convert.ChnageType בצורה הבאה:

 



static void MyFunc<T>(T item)


{


    Work((Entity)Convert.ChangeType(item, typeof(Entity)));


}


 

 

כדי לחסוך קצת זמן ולכתוב קוד בצורה יפה יותר, כתבתי את ה – Extension Method הבא

 



public static class ObjectExtension


{


    public static T ChangeType<T>(this object obj)


    {


        return (T)Convert.ChangeType(obj, typeof(T));


    }


}


 

 

וכעת ניתן לכתוב קוד כזה:

 



static void MyFunc<T>(T item)


{


    Work(item.ChangeType<Entity>());


}


 

 

 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

3 תגובות

  1. יקיר23 באוקטובר 2011 ב 18:58

    אהלן,
    אני אישית חשבתי על פיתרון אחר,
    הייתי בונה ABSTRACT CLASS שממנו ENTITY יורש, ובסוף מוסיף
    where T : BaseObject

    מה דעתך?

    הגב
  2. Shlomo25 באוקטובר 2011 ב 17:23

    היה עוזר רק עם המתודה מקבלת BaseObject, אבל לא עוזר עם המתודה מקבלת מי שיורש ממנו

    הגב
  3. משה26 באוקטובר 2011 ב 17:40

    ניתן פשוט לעשות פעמיים casting.

    Work((Entity)(object)obj);

    הגב