2013-08-11 2 views
1

У меня есть следующий фрагмент кода:Как я могу переписать это общее?

public Component GetComponent(Type type) 
    { 
     return Components.FirstOrDefault(component => component.GetType() == type); 
    } 

Вызывающий должен сделать неприятный оттенок, чтобы получить компонент он прошел в - как я могу переписать это слепок-менее общий?

ответ

3

Если я правильно прочитал ваш вопрос, вы можете переместить бросок внутри функции и сделать это таким образом.

public T GetComponent<T>() where T : Component 
{ 
    return (T)Components.FirstOrDefault(c => c.GetType() == typeof(T)); 
} 

Если тип не известен во время компиляции происходит в функции (как, скажем, GetComponet() вызывается в цикле, где тип передается в качестве аргумента) не существует никакого способа, чтобы получить сильно типизированных объект назад.

+0

Тип действительно известен во время компиляции. –

+0

Работает точно так, как предполагалось, - большое спасибо! –

+0

Точно так же, как программисты отмечают: предложение кода 'where' не обязательно для функционирования кода, но оно помогает вам случайно передать тип, который не является производным от Component, и никогда не будет содержаться внутри коллекции компонентов. –

0
public Component GetComponent<T>() where T : Component{ 
    var type = typeof(T); 
    return Components.FirstOrDefault(c => c.GetType() == type); 
} 
Смежные вопросы