次のコードがあります。
public Component GetComponent(Type type)
{
return Components.FirstOrDefault(component => component.GetType() == type);
}
呼び出し元は、渡されたコンポーネントを取得するために厄介なキャストを行う必要があります-これをキャストなしのジェネリックに書き直すにはどうすればよいですか?
あなたの質問を正しく読んだら、キャストを関数内に移動して、このようにすることができます。
public T GetComponent<T>() where T : Component
{
return (T)Components.FirstOrDefault(c => c.GetType() == typeof(T));
}
関数に入るコンパイル時に型が不明な場合 (たとえばGetComponet()
、型が引数として渡されるループで呼び出されるなど)、厳密に型指定されたオブジェクトを取得する方法はありません。
public Component GetComponent<T>() where T : Component{
var type = typeof(T);
return Components.FirstOrDefault(c => c.GetType() == type);
}