DCSIMG
Cast from Generic type - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Cast from Generic type

 

אחד הדברים המפריעים בעבודה עם 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>());

}

 
 
 
פורסם: Oct 23 2011, 10:15 AM by Shlomo | with 3 comment(s)

תוכן התגובה

Shlomo כתב/ה:

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

# October 25, 2011 5:23 PM

משה כתב/ה:

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

Work((Entity)(object)obj);

# October 26, 2011 5:40 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 2 and 4 and type the answer here:


Enter the numbers above: