함수에서 var를 두 번 사용할 수 있습니까? 이것이 가능하지 않다면 예컨대이 시나리오에서 'var'를 사용할 수 있습니까?
var varname= sometype;
if(true)
{
varname= type1;
}
else
{
varname=type2;
}
나는이 VAR의 제한 사항입니다 말할 것입니다.
함수에서 var를 두 번 사용할 수 있습니까? 이것이 가능하지 않다면 예컨대이 시나리오에서 'var'를 사용할 수 있습니까?
var varname= sometype;
if(true)
{
varname= type1;
}
else
{
varname=type2;
}
나는이 VAR의 제한 사항입니다 말할 것입니다.
글쎄 그건 var
그 자체를 한 번만 사용하는 것입니다.하지만 초기화 할 표현식이있는 한 괜찮습니다. (type1
및 type2
하지만 sometype
의 형식으로 변환 가능해야합니다.)
뭘하지 수 것은 이것이다 :이
var x; // No initialization expression
if (condition)
{
x = firstExpression;
}
else
{
x = secondExpression;
}
(초기화 표현으로이있는 익명 함수 또는 null 리터럴 일 수 없습니다.
이var x = condition ? firstExpression : secondExpression;
예, 당신이이 경우에 var
을 사용할 수 있지만 sometype
type1
및 type2
와 동일한 유형이다 : 당신이 이런 종류의 물건을 원한다면, 당신은 잠재적으로 조건 연산자를 사용할 수 있습니다.
type1
경우 type2
은하고 경우에만 sometype
이 type1
및 type2
모두의 슈퍼 클래스 인 경우 사실 다른 종류의, 당신은 여전히 var
를 사용할 수 있습니다.
컴파일시에 type1
과 type2
이 무엇인지 모르면 var
대신 dynamic
을 사용해야합니다. type1
과 type2
이 동일한 인터페이스를 구현한다는 것을 알고 있다면 var
대신에 선언문의 인터페이스를 사용하십시오.
인라인 할당은 var
유형을 정의합니다. type1
과 type2
이 작동하는 sometype
과 호환되지만 첫 번째 과제는 무의미한 경우 ref-type 인 경우 null
을 전송할 수 있습니다. 이것은 본질적으로 아무 조합됩니다
var varname= (sometype)null;
하지만 그 점
, 당신은뿐만 아니라 단지 더 할당을 사용하지 있습니다sometype varname;
은 틀림없이 더 나은 레이아웃은
var name = condition ? expr1 : expr2;
참고 없을 것 명백한 동일한 유형이없는 경우 (공통 기본 유형의 다른 하위 클래스 일 수 있음) 결정할 때 도움이 필요할 수 있습니다.
var name = condition ? (Foo)expr1 : expr2;
형식이 서로 관련이없는 경우 var
을 적절하게 사용하지 않습니다. object
또는 dynamic
이 더 적합 할 수 있습니다.
이것은 불가능합니다. var
은 타입 안전합니다. 즉, 해당 유형이 할당에서 추론됩니다. 따라서 귀하의 예에서 var
은 sometype 유형입니다.다른 유형을 할당하는 것은 가능하지 않습니다 (두 항목간에 변환이 불가능한 한).
var
대신 object
을 사용하면이 시나리오에서 작동합니다.
귀하의 예는 혼란 스럽습니다. 변수에 유형을 지정하지 않으면 값을 할당합니다. var varname=3;
이라고 말하면 varname
은 int
입니다. 그런 다음 int varname=3;
이라고 말한 것처럼 int (int로 변환되는 값) 만 할당하도록 제한됩니다. 차이점은 없습니다.
초기화 구문이있는 한 가능합니다. 또한 참조 유형에 대해 var를 사용하고 값 유형에 대해 유형을 입력하는 것이 좋습니다.
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에서 찾을 수 있습니다.
var 키워드를 두 번 사용하지 않았습니다. –