PDA

View Full Version : سوال: ارسال پارامتر جنریک



el_abdollahi
دوشنبه 21 اردیبهشت 1388, 02:31 صبح
با سلام

توی برنامه ام به این کد نیاز دارم:


public CMyListEnumerator(CMyList<T> myList)
{
this.myList = myList;
Reset();
}

ولی از <T> این خطا رو میگیره:
The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)

به نظر شما باید چه جوری پارامترم رو ارسال کنم؟

esmaeily-hosein
دوشنبه 21 اردیبهشت 1388, 10:27 صبح
public class GenericSample<T>
where T : IComparable
{
//Ctor
public GenericSample(List<T> list)
{
this.InnerList = list;
}

//List of T
public IEnumerable<T> InnerList
{
get;
protected set;
}

//Union
public void Union(List<T> mergeList)
{
InnerList = InnerList.Union(mergeList);
}

//Swap Method
public static void Swap(ref T obj1, ref T obj2)
{
T t = obj2;

obj2 = obj1;
obj1 = t;
}
}

el_abdollahi
دوشنبه 21 اردیبهشت 1388, 18:40 عصر
سلام
ممنون
میشه قضیه این Where رو به من بگین:


public class GenericSample<T>
where T : IComparable


در ضمن مشکل من حل نشد.
کلاس MyList در واقع یه کلاس شبیه سازی شده از روی کلاس List خود دات نت است که T رو به عنوان ورودی میگیره.

راه حل شما چیه؟

NewFoxStudent
دوشنبه 21 اردیبهشت 1388, 19:16 عصر
فرض کنید کلاس MyList از یه لیست جنریک ارث بری کره

void test(mylist list)
{

}
class mylist : List<int>
{

}

esmaeily-hosein
دوشنبه 21 اردیبهشت 1388, 23:41 عصر
ببین خیلی ساده است ببین Ctor Method باید نوع type اون در کلاس تعریف بشه مثلا :



public class CMyListEnumerator<T>
{
public CMyListEnumerator(CMyList<T> myList)
{
this.myList = myList;
Reset();
}
}

حالا T شناخته میشه .
اما در مورد Where باید بگن برای محدود کردن Type هایی که به کلاس تو میدن میتونی محدودیت بزاری مثلا در مثال من فقط type هایی رو میشه داده که IComparable رو Implement کردند .