2014-10-20 5 views
0

У меня возник вопрос о универсальном методе.Возврат определенного типа из общего метода

Предположим, что я создаю игру с пользовательским интерфейсом, и у нее есть класс ResourceManager. Существует метод, чтобы получить объект из ResourceManager и его возвращения родового типа, вот код класса:

public class ResourceManager 
{ 
     // The list that store the object 
     private List<Control> _objects = new List<Control>(); 

     // Add object into the list 
     public void Add(params Control[] objects) 
     { 
      _objects.AddRange(objects); 
     } 

     // Get the object from the list 
     public T GetObject<T>(string name) 
     { 
      try 
      { 
       foreach (Control obj in _objects) 
       { 
        if (obj.Name == name) 
         return (T)Convert.ChangeType(obj, typeof(T)); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 

      return default(T); 
     } 
} 

, как вы можете видеть, объекты Control класса. В моем проекте есть несколько классов, которые наследуют этот класс, скажем, его Button, Image и CheckBox

код запуска гладко, когда я называю:

CheckBox checkBox = ResourceManager.GetObject<CheckBox>("CheckBox1"); 
Control control = ResourceManager.GetObject<Control>("Control1"); 

Проблема, его принятие любого типа, как:

string str = ResourceManager.GetObject<string>("blablabla1"); 
int num = ResourceManager.GetObject<int>("blablabla2"); 

Я просто хочу код обыкновение компиляции, когда тип не Control и наследование от него. Спасибо!

ответ

5

добавить ограничение public T GetObject<T>(string name) where T:Control

+0

никогда не слышал о 'where' заявление в C#, спасибо! – SirusDoma

+0

@ChronoCross Поиск общих ограничений типов – fahadash

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