2015-03-26 1 views
0

Возможно ли использовать this.GetType() как тип List?
У меня есть следующие class, унаследованные несколько объектов:Обратный лист <this>

public class MainRepository 
{ 
    // ??? should be the type of this 
    public List<???> GetAll() 
    { 
     return new List<???>(); 
    } 
} 

Я знаю, это может быть сделано в качестве общего метода, как это:

public List<T> GetAll<T>() 
    { 
     return new List<T>(); 
    } 

Но мне интересно, если это может быть сделано без явно определяя тип вызывающего метода.

+0

Вы всегда можете определить список как «Список », а затем передать объекты в любой тип. –

+0

Почему бы не использовать статический метод для возврата типа класса? public static List GetAll() – cdie

+0

Что не так с общим подходом? – Sayse

ответ

1

Я считаю, что вы могли бы сделать это, если это является жизнеспособным вариантом для вас ?:

public class MainRepository<T> 
{ 
    public List<T> GetAll() 
    { 
     return new List<T>(); 
    } 
} 

Если я не ошибаюсь, что позволит вам вызвать метод без указания типа в методе -call (хотя вам, очевидно, нужно указать его для класса).

Я предполагаю, что вы хотите сделать это, чтобы иметь общий общий репозиторий, который может быть подклассифицирован или что-то подобное? Вы могли бы сделать что-то подобное (только примерное представление):

public class BaseRepo { 

} 

public class MainRepository<T> : BaseRepo where T : BaseRepo{ 

    public List<T> GetAll(){ 
     return new List<T>(); 
    } 
} 
2

Это возможно только через отражение, так как истинный тип объекта известен только во время выполнения. Поэтому вам нужно разработать свой метод, чтобы вернуть общий базовый класс всех списков, который является объектом в .NET, и динамически создавать список в этом методе.

public object GetAll() 
{ 
    return System.Activator.CreateInstance(typeof(List<>).MakeGenericType(this.GetType())); 
} 

Однако я не понимаю, почему вы хотели бы этого сделать.