2009-11-30 4 views
4

У меня возникли проблемы с записью класса, который использует generics, потому что это первый раз, когда мне пришлось создавать класс, который использует generics.Нужна помощь с C# generics

Все, что я пытаюсь сделать, это создать метод, который преобразует List в EntityCollection.

Я получаю ошибку компиляции: типа «Т» должен быть ссылочным типом для того, чтобы использовать его в качестве параметра «TEntity» в универсальном типе или методе «System.Data.Objects.DataClasses.EntityCollection»

Вот код, который я пытаюсь использовать:

public static EntityCollection<T> Convert(List<T> listToConvert) 
    { 
     EntityCollection<T> collection = new EntityCollection<T>(); 

     // Want to loop through list and add items to entity 
     // collection here. 

     return collection; 
    } 

Он жалуется на линии коллекция EntityCollection = новый EntityCollection() кода.

Если кто-нибудь может помочь мне с этой ошибкой или объяснить мне, почему я его получаю, я был бы очень признателен. Благодарю.

ответ

14

Читайте на общих ограничений в .NET. В частности, вам нужно ограничение «where T: class», поскольку EntityCollection не может хранить типы значений (C# structs), но неограниченный T может включать типы значений. Вам также нужно будет добавить ограничение, чтобы сказать, что T должен реализовать IEntityWithRelationships, опять же потому, что требует EntityCollection. Это приводит к чему-то, такие как:

public static EntityCollection<T> Convert<T>(List<T> listToConvert) where T : class, IEntityWithRelationships 
3

Вероятно, вы получаете эту ошибку, поскольку конструктор EntityCollection требует, чтобы T был классом, а не структурой. Вам нужно добавить ограничение where T:class на ваш метод.

5

Вы должны ограничить параметр типа Т быть ссылочного типа:

public static EntityCollection<T> Convert(List<T> listToConvert) where T: class 
+0

Я нашел этот ответ имеет минимальное требование для компиляции. – Andez

3

вам нужно родовое ограничение, но и объявить метод, как родовое, чтобы этот

private static EntityCollection<T> Convert<T>(List<T> listToConvert) where T : class,IEntityWithRelationships 
     { 
      EntityCollection<T> collection = new EntityCollection<T>(); 

      // Want to loop through list and add items to entity 
      // collection here. 

      return collection; 
     } 
Смежные вопросы