2015-01-05 3 views
1

У меня есть класс:объявить метод C# универсального типа

internal class Paginated<T> where T : class 
{ 
    public List<T> data { get; set; } 

    public int total { get; set; } 
    public int page { get; set; } 
    public int per_page { get; set; } 
    public Paging paging { get; set; } 
} 

и в другом классе, у меня есть метод:

public T RequestAllPaginated<T>() where T : Paginated<AnyType> //AnyType??? 
{ 
    var item = Request<T>(); 

    //Get all data from paging property 
    if(item != null) 
    { 
     var i = item as Paginated<AnyType>; //AnyType??? 
     var data = i.data; 

    } 

    return item; 
} 

Т всегда Paginated<AnyType> типа. Вопрос в том, как я могу определить в объявлении метода RequestAllPaginated и позже его использовать?

ответ

3

Попробуйте это решение

public T RequestAllPaginated<T, TK>() where T : Paginated<TK> where TK : class 
{ 
    var item = Request<T>(); 

    //Get all data from paging property 
    if(item != null) 
    { 
     var i = item as Paginated<TK>; 
     var data = i.data; 

    } 

    return item; 
} 

Альтернативное решение:

public Paginated<T> RequestAllPaginated<T>() where T : class 
{ 
    var item = Request<Paginated<T>>(); 

    //Get all data from paging property 
    if(item != null) 
    { 
     var i = item as Paginated<T>; 
     var data = i.data; 

    } 

    return item; 
} 
+0

ТК является частью Т, что делает его излишним, чтобы объявить ТЗ и я cann't изменить RequestAllPaginated <> С разбивкой на страницы к RequestAllPaginated < Paginated , Альбом>. –

+0

@ DanielBahmani, пожалуйста, посмотрите на мое альтернативное решение –

+0

альтернатива имеет больше смысла, спасибо. –

Смежные вопросы