2011-01-26 6 views
14

변수 타입을 사용하여 변수를 선언 :이 코드를

Type leftType = workItem[LeftFieldName].GetType(); 
내가 그 유형의 변수를 선언 할

:

leftType someVar; 

가 가능합니까?

+2

아니요, 그렇지 않습니다. 신중하게 그것에 대해 생각하면, 그러한 변수가 전혀 쓸모가 없다는 것을 알게 될 것입니다. – SLaks

+0

성취하려는 것은 무엇입니까? 실제 문제를 해결할 다른 방법이있을 수 있습니다. – Trinidad

답변

20

이러한 작업을 수행하여 알려진 인터페이스로 전송할 수 있습니다.

var someVar = Convert.ChangeType(someOriginalValue, workItem[LeftFieldName].GetType()); 
var someVar = Activator.CreateInstance(workItem[LeftFieldName].GetType()); 

당신이 dynamicvar를 교체하는 경우 (그리고 닷넷 4를 사용하는), 당신은 당신이의 somevar 객체에 기대 메소드를 호출 할 수 있습니다. 존재하지 않으면 MissingMethodException이 발생합니다.

+0

감사합니다. 내가 필요한 것. –

+0

그것은 약간의 작업으로 보입니다. 일을하는 것이 최선의 방법인가요? 동적 유형의 변수를 만드는 또 다른 (더 나은) 방법은 없습니까? –

+1

@MoheTheDreamy 변수를 생성하는 가장 쉬운 방법은 ** var someVar = workItem [LeftFieldName]입니다. ** 그럼에도 불구하고 ** 안전하지 않습니다 ** 실수로 ** 변경 될 수 있습니다 ** (* 참조 유형의 경우 *) ** 원래 객체의 ** 값 **. [Austin] (https://stackoverflow.com/questions/4800446/declare-a-variable-using-a-type-variable/4800501#4800501)의 대답에 설명 된 전략을 고수 할 것을 권합니다. (예 : var someVar = Activator.CreateInstance (workItem [LeftFieldName] .GetType());) –

1

당신은 그렇게 할 수 없습니다.

당신은 닷넷 4,뿐만 이전 닷넷 버전의 dynamic 유형을 사용할 수 있습니다, 맞는 유일한 유형 object, 당신은 수동으로 다시는 object에 할당 된 내용에 .GetType()을 테스트하여 나중에 캐스팅 할 필요가있는 형식화 된 변수.

독서 : SO link: whats-the-difference-between-dynamicc-4-and-var

+4

어떻게 적용되는지 잘 모르겠습니다. 여기서 'var'의 사용은 중요하지 않습니다. – Joe

+0

'var someVar;'를'var someVar ='로 변경 한 다음 암시 적으로'someVar'를 입력하는 것을 볼 수 있습니다. 이것은'someVar'를 입력하는 것입니다. 이것은 OP가 무엇이 었는지입니다. db 컬럼 유형을 알아내는 것 같이. – RichardTheKiwi

+2

* var * 항상 컴파일 타임에 특정 유형으로 해결된다는 것을 알기를 바랍니다. –

8

이 불가능합니다.

가변 유형은 컴파일 타임 개념입니다. 런타임까지 알 수없는 유형 의 변수를 선언하는 것은 의미가 없습니다.
변수가 무엇인지 알 수 없으므로 변수를 사용하여 아무 것도 할 수 없습니다.

아마도 dynamic 키워드를 찾고있을 것입니다.

+0

가능한 사용 사례 : 내 MVC 프로젝트에서'Form' 개체가 있고'new EditField (e => e.AddressId)'와 같은 것을 사용하여 편집 할 필드를 추가합니다.'MemberExpression'을 사용하여 올바른 양식 요소를 만들지 만, 일부 유형에는 기본값이 필요합니다. EG'long'은 디폴트 값이 0이고'DateTime'은 디폴트 값을 가지고 있습니다. 모든 유형에 적절한 기본값을 설정하기 위해 많은 If 문을 작성하는 대신 Austin이 설명하는 것처럼 간단하게 인스턴스를 작성하고 올바른 디폴트 값을 얻기 위해'.ToString() '을 사용합니다. –

1

아니요, 불가능합니다. 변수의 유형은 컴파일시 알려 져야합니다.

object 유형의 변수를 선언 할 수 있으며 모든 데이터 유형을 저장할 수 있습니다.

2

GetType은 런타임에 평가되며 비 -dynamic 선언은 컴파일시입니다 (예보다 구체적입니다). var조차도 모호하지 않은 유형의 값을 지정해야합니다.

3

개체 x = Activator.CreateInstance (Type)를 사용하면 개체를 만들 수 있습니다. 그 시점을 넘어서 많은 일을 할 수 있는지 여부는 확실하지 않습니다.

+1

그러면 해당 유형의 인스턴스가 만들어지며 해당 유형의 변수는 생성되지 않습니다. – Guffa