2011-03-18 8 views
0

함수에서 var를 두 번 사용할 수 있습니까? 이것이 가능하지 않다면 예컨대이 시나리오에서 'var'를 사용할 수 있습니까?

var varname= sometype; 
if(true) 
{ 
    varname= type1; 
} 
else 
{ 
    varname=type2; 
} 

나는이 VAR의 제한 사항입니다 말할 것입니다.

+7

var 키워드를 두 번 사용하지 않았습니다. –

답변

7

글쎄 그건 var 그 자체를 한 번만 사용하는 것입니다.하지만 초기화 할 표현식이있는 한 괜찮습니다. (type1type2하지만 sometype의 형식으로 변환 가능해야합니다.)

뭘하지 수 것은 이것이다 :이

var x; // No initialization expression 
if (condition) 
{ 
    x = firstExpression; 
} 
else 
{ 
    x = secondExpression; 
} 

(초기화 표현으로이있는 익명 함수 또는 null 리터럴 일 수 없습니다.

var x = condition ? firstExpression : secondExpression; 
1

예, 당신이이 경우에 var을 사용할 수 있지만 sometypetype1type2와 동일한 유형이다 : 당신이 이런 종류의 물건을 원한다면, 당신은 잠재적으로 조건 연산자를 사용할 수 있습니다.

type1 경우 type2은하고 경우에만 sometypetype1type2 모두의 슈퍼 클래스 인 경우 사실 다른 종류의, 당신은 여전히 ​​var를 사용할 수 있습니다.

컴파일시에 type1type2이 무엇인지 모르면 var 대신 dynamic을 사용해야합니다. type1type2이 동일한 인터페이스를 구현한다는 것을 알고 있다면 var 대신에 선언문의 인터페이스를 사용하십시오.

1

인라인 할당은 var 유형을 정의합니다. type1type2이 작동하는 sometype과 호환되지만 첫 번째 과제는 무의미한 경우 ref-type 인 경우 null을 전송할 수 있습니다. 이것은 본질적으로 아무 조합됩니다

var varname= (sometype)null; 

하지만 그 점

, 당신은뿐만 아니라 단지 더 할당을 사용하지 있습니다

sometype varname; 

은 틀림없이 더 나은 레이아웃은

var name = condition ? expr1 : expr2; 

참고 없을 것 명백한 동일한 유형이없는 경우 (공통 기본 유형의 다른 하위 클래스 일 수 있음) 결정할 때 도움이 필요할 수 있습니다.

var name = condition ? (Foo)expr1 : expr2; 

형식이 서로 관련이없는 경우 var을 적절하게 사용하지 않습니다. object 또는 dynamic이 더 적합 할 수 있습니다.

0

이것은 불가능합니다. var은 타입 안전합니다. 즉, 해당 유형이 할당에서 추론됩니다. 따라서 귀하의 예에서 var은 sometype 유형입니다.다른 유형을 할당하는 것은 가능하지 않습니다 (두 항목간에 변환이 불가능한 한).

var 대신 object을 사용하면이 시나리오에서 작동합니다.

1

귀하의 예는 혼란 스럽습니다. 변수에 유형을 지정하지 않으면 값을 할당합니다. var varname=3;이라고 말하면 varnameint입니다. 그런 다음 int varname=3;이라고 말한 것처럼 int (int로 변환되는 값) 만 할당하도록 제한됩니다. 차이점은 없습니다.

0

초기화 구문이있는 한 가능합니다. 또한 참조 유형에 대해 var를 사용하고 값 유형에 대해 유형을 입력하는 것이 좋습니다.

0

C#의 var 유형은 유형을 초기화해야합니다. 이 유형은 컴파일 타임에 결정되고 적용됩니다. 컴파일러에서 형식이 달라질 것이라고 판단하면 익명 형식을 제공합니다 (http://msdn.microsoft.com/en-us/library/bb397696.aspx 참조).

익명 형식은 개체 형식으로 만 캐스팅 할 수 있습니다. 따라서 짧은 대답은 '아니오'입니다. 둘 이상의 유형을 나타낼 때는 var을 사용할 수 없습니다. 다양한 유형을 포함 할 수있는 객체조차 그 자체가 하나의 유형이며 그 유형이 다른 유형으로 변경 될 수 없다는 점을 감안할 때 var입니다. 이러한 의미에서 var 키워드를 사용하면 유연하면서도 강력하게 입력 할 수 있습니다.

다양한 유형의 항목 배열이있는 경우 컴파일러는 var에 anon 유형을 구현하며 본질적으로 객체로 작동합니다. 알맞은 설명은 http://msdn.microsoft.com/en-us/library/bb384061.aspx에서 찾을 수 있습니다.

관련 문제