System.Data.Linq.Table <T> үшін кеңейтім әдісін қалай жазуға болады?

Мен кейбір сынақ сынақ/консол қосымшасы үшін осы кішкентай, тривиальді кеңейтім әдісін жазғым келді және әдіс қолтаңбасын қалай алуға болатындығын біле алмадым. Мен мұны әр System.Data.Linq.Table-ға қосып көргім келеді және мен оны T параметрінің данасын параметр ретінде қабылдағым келеді.

Міне, әлі күнге дейін компиляцияланбаған нәрсе

public static void InsertAndSubmit(this System.Data.Linq.Table tbl, T element)
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}

Түрі 'T' параметрі ретінде оны қолдану үшін анықтама түрі болуы керек   Жалпы түрдегі немесе әдіс бойынша 'TEntity'   'System.Data.Linq.Table'

4

2 жауаптар

Мынаны көріңіз:

public static void InsertAndSubmit(this System.Data.Linq.Table tbl, T element)
    where T : class
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}

Бұл жұмыс істеу үшін T түрін анықтамалық тип ретінде ( class ) шектеу керек.

If you look at Table's documentation you will notice this same type constraint on TEntity of class. So for your T to be compatible with TEntity it must meet the same constraints.

6
қосылды
Сондықтан менің кеңейту әдісінде бұл туралы анықтауым керек, себебі олар оны анықтауда анықтайды. Рахмет!
қосылды автор Allen Rice, көзі
Айқын, бұл мағынасы бар. Мен ешқашан Linq.Table анықтамасын қарастыруды ойладым және мен ақылды болып жүрдім. Мен шектеулердің кеңейтілу әдістеріне көшкенін түсіндім. Көп рақмет! Маған мүмкіндік бергенде, мен оны қабылдаймын
қосылды автор Allen Rice, көзі
Иә. Компилятор сіздің T сөзінің шектеулі екенін және сондықтан TEntity ішінде көрсетілген шектеулермен үйлесімді емес екенін көреді. Сондықтан сіздің түріңіз шынымен TEntity -мен үйлесімді екенін бақылаңыз.
қосылды автор Joshua Rodgers, көзі

Тек T ішіндегі сілтеме түрлерін ғана қолданатыныңызды көрсетуіңіз керек. Тырысу:

public static void InsertAndSubmit(this System.Data.Linq.Table tbl, T element) 
    where T : class
{
    tbl.InsertOnSubmit(element);
    tbl.Context.SubmitChanges();
}
3
қосылды
ARGH, рахмет, әдіс қолтаңбасының дұрыс екеніне сенімдімін. Мен T түрін көрсету керек деп ойламадым
қосылды автор Allen Rice, көзі