PDA

View Full Version : مشکل در Generic



reza_Nazem
چهارشنبه 20 دی 1391, 19:07 عصر
سلام
کد زیر را ببینید


private void test1( object obj )
{
Type t = obj.GetType();
List<t> lst = new List<t>();
}



کامپایلر به اکد بالا خطای زیر را می دهد

'WindowsFormsApplication1.Form1.t' is a 'field' but is used like a 'type'


توجه کنید مشکل من فقط ایجاد لیست نیست من میخوام از توابع generic دیگه linq هم استفاده کنم مثل Oftype , Cast

در واقع چه جوری میشه از توابع Generic مانند مثال بالا استفاده کرد . ورودی تابع Test1 هر نوع ابجکتی می تونه باشه

RED-C0DE
چهارشنبه 20 دی 1391, 22:37 عصر
مشکل دقیقا چیه؟ میخواین در RunTime یک نوع generic رو بسازین؟
یا چیز دیگه؟

اگه جواب آره باشه می تونین در runtime بصورت زیر اینکارو بکنین:


public static object MakeGenericType(Type pGenericType, Type pArgumantType, params object[] pParams)
{
var typeOfGeneratedGeneric = pGenericType.MakeGenericType(pArgumantType);
return Activator.CreateInstance(typeOfGeneratedGeneric, pParams);
}


برای استفاده با توجه به مثال خودتون:

private void test1(object obj)
{
Type t = obj.GetType();
var myGenericObject = MakeGenericType ( typeof(List<>), t);

// ....
}



با تابع MakeGenericType می تونین هر تعریف generic ای رو در runtime داشته باشین (البته نوع generic ای که تنها 1 آرگومان می گیره)