Type이 포함 된 변수를 사용하여 Generic <T> 형식 인스턴스 만들기


85

다음 코드를 얻을 수 있습니까? 작동하지 않는다는 것을 알고 있지만 해결 방법이 있는지 궁금합니다.

Type k = typeof(double);
List<k> lst = new List<k>();

"이는 C # 4.0에서 수행 할 수 있습니다." 적어도 당신이 보여주는 방식으로는 할 수 없습니다. C # 4에서는 컴파일 타임에 일반 형식 매개 변수를 지정해야합니다. 여전히 Type 변수를 제네릭 유형 매개 변수로 전달할 수 없습니다.
itowlson 2010 년

1
질문 일 때 질문으로 표현하십시오. 지정된 코드는 C # 4.0으로 수행 할 수 없습니다.
Lasse V. Karlsen


C # 4.0에 대해 죄송합니다. 나는 대답이 C # 4.0에서 개념을 사용할 수 있다는 것을 의미했으며 반드시 코드가 C # 4.0에서 작동한다는 것을 의미하지는 않았습니다. DrJokepu를 편집 해 주셔서 감사합니다.
Chris

12
저는이 질문이 완벽하게 언급되었다고 생각합니다.
RunHolt

답변:


119

예, 있습니다 :

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);

나는 이것이 내가 원하는 것이라고 생각한다. 다시 한 번 확인하고 잠시 답변으로 표시하겠습니다.
Chris

3
여기서 주된 문제는 당신이 우리에게 원하는 것을 설명하지 않는다는 입니다. 당신은 우리의 시도가 실패한 보여 뭔가를 하고 무엇을 수행하는 방법을 묻는 당신이 원하는 . 추측이 아닌 답을 원하면 어떻게하려고했는지 대신해야 할 일을 설명해야합니다.
Lasse V. Karlsen

기본적으로 유형이 유형 변수로 지정된 List <>를 만들고 싶습니다.
Chris

3
감사합니다 David M, 귀하의 코드는 내가 필요한 것을 정확하게 수행합니다. 적절한 질문을 제공하지 않아 답변하지 못한 분들께 죄송합니다.
Chris

Generic Methods에 대해서도 같은 방식으로 할 수 있습니까? 방법에 대한 동적 유형을 전달해야합니다. 아래 링크에 문제를 게시했습니다. stackoverflow.com/questions/4101784/…
Mathiyazhagan

3

더 깨끗한 방법은 일반적인 방법을 사용하는 것입니다. 다음과 같이하십시오.

static void AddType<T>()
    where T : DataObject
{
    Indexes.Add(typeof(T), new Dictionary<int, T>());
}

"인덱스"가 무슨 뜻인지 잘 모르겠습니다. 변수가 다른 곳에 선언되어 있습니까?
jrh dec
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.