2016-08-03 2 views
1

다음 코드가 있지만 실행할 수 없습니다. 모두 주어진 유형의 목록에서 인스턴스 목록을 만들고 싶습니다.유형 목록에서 인스턴스 가져 오기

List<Type> types = new List<Type> 
{ 
    typeof(String), 
    typeof(Double), 
    typeof(Object) 
}; 

List<object> instances = types.Select(t => Activator.CreateInstance(t) as t); 

나는 오류

> t is a variable but is used like a type 
+2

"* 실행할 수 없습니다 *"더 이상 할 수 있겠습니까? –

+0

내가 받고있는 구문 오류로 질문을 편집했습니다. – heltonbiker

+1

글쎄, 이건 실제 타입으로 캐스팅하려고 시도 할 때 컴파일되지 않습니다. List instances = types.Select (t => Activator.CreateInstance (t)). ToList(); 하지만 이것들은 런타임에 깨질 것입니다. 왜냐하면이 모든 것들이 기본 생성자를 가지고 있지 않기 때문입니다. –

답변

2

여기에 컴파일 오류가톤로 말하여 자동으로 컴파일러는 객체를 입력 캐스팅 허용하지 않는 사실에 기인를 얻을. 이 코드는 목록에있는 모든 유형에 기본 생성자 (기본 생성자가없는 문자열)가 필요하기 때문에 여전히 버그가 있습니다.

+0

댓글에있는 코드가 작동하며 내 코드의 유형은 예제로 사용됩니다. 'List '을 만들고 파생 형을 사용하여 다형성 인스턴스를 만들 계획입니다. – heltonbiker

+0

정확히 여기에 목적이 무엇인지 모르겠지만 한 번은 이런 코드를 굉장히 냄새 나는 코드로 썼다. –

+0

내 응용 프로그램에서 수행 할 수있는 계산이 가능합니다. 작성한 모든'Selection' 인스턴스에 대해 계산이 필요하므로 각 계산 유형에 대한 클래스가 있습니다. IoC 또는 동적 dll 로딩을 통해 애플리케이션을 시작할 때 인스턴스화 할 수있는 모든 계산 목록을 만들고 싶습니다. 그래서 만약 내가 기본 클래스'Calculation'을 가지고 있고'MaxCalculation','AverageCalculation' 등등을 서브 클래스로 만들었습니다. 그리고 제가 만드는 모든'Selection'에 대해'Calculation'의 각 서브 클래스의 인스턴스 하나가 필요합니다. 그리고 내 코드가 지금과 같은 냄새를 풍기는 것에 전적으로 동의합니다. – heltonbiker