질문 : C#에서 변수 (문자열 또는 int/double 유형) 또는 배열 (문자열 또는 int/double 유형)을 초기화 할 수 있습니까?C#에서 변수 또는 배열 초기화 여부를 확인하는 방법
미리 감사드립니다.
질문 : C#에서 변수 (문자열 또는 int/double 유형) 또는 배열 (문자열 또는 int/double 유형)을 초기화 할 수 있습니까?C#에서 변수 또는 배열 초기화 여부를 확인하는 방법
미리 감사드립니다.
일부 초기화가 보장됩니다. 정적 또는 인스턴스 멤버의 경우 유형 또는 인스턴스가 명시 적 또는 암시 적으로 구성 될 때 모든 변수가 자동으로 초기화됩니다 (이 경우 default(Type)
이 값이므로 숫자 유형의 경우 0, 문자열 및 기타 참조 유형의 경우 null
등) .
로컬 변수의 경우 선언 전에 사용할 수 없으므로 로컬 변수를 검사 할 수 있으면 초기화됩니다.
이게시물 주셔서 감사합니다. 그러나, 내 문제는 변수의 가능한 값이 초기화 된 값과 동일한 0이 될 수 있다는 것입니다. – Mavershang
@ user208080 : 요점은 변수 *가 초기화된다는 것입니다. * user-initialized *를 의미하는 경우, 아니오, 사용자가 직접 추적하지 않는 한이를 확인할 방법이 없습니다. –
Int32와 같은 기본 유형에 해당 값이 설정되어 있는지 확인하려는 경우 null 허용 유형을 사용하십시오. 그런 다음 코드에서 다른 값으로 설정하지 않은 경우 null 참조를 갖습니다. – HCL
아니요. 그러나 로컬 변수 인 경우 컴파일러 오류가 발생합니다. 클래스 멤버 인 경우 자동으로 기본값 (int의 경우 0, 객체의 경우 null)으로 초기화됩니다.
뺨에 혀, 정확한 대답
는 소스 코드를 스캔하고 선언에서 하나 초기화, 또는 다른 곳을 사용하기 전에 보장되어 있는지 확인하기 위해 변수의 모든 용도와 선언을 찾을 수 있습니다.
... 또는 컴파일러가이 작업을 수행하므로 컴파일 만 시도 할 수 있습니다. –
+1 @Adam; 말이된다. –
코드에서 모든 경로를 거치지 않는 한 컴파일러가 감지하지 못하는 순간이 있습니다. 이 경우 프로그램으로 완료 한 점검이 필요합니다. 예를 들어, 모든 객체가 인스턴스화되지 않는 객체 배열입니다. for 루프를 수행하고 각 객체를 호출하면 ... – Roast
,이 시도 :
If var = NULL Then
MsgBox ('Not initialized')
End If
예하실 수 있습니다.
요청할 때 인스턴스 (문자열 또는 배열)가 필요한 유형의 경우 null인지 확인할 수 있습니다.
당신이 여러 가지를 할 수 있지만, 한 가지 방법은 다음과 같습니다
if (myObject == null)
{
//initialize it here
}
기본 데이터 형은 인스 턴싱을 필요로하지 않습니다. 예 :
int i;
못해이 같 0
사실, 모든 변수를 액세스하기 전에 모든 변수를 초기화해야하기 때문에 컴파일 타임 오류가 발생합니다 ('int i;'). – Donnie
"초기화되지 않음"은 "null이 아닌"것과 동일하지 않습니다. –
C# 당신이 읽을 전에 모든 변수가 어떤 값으로 초기화 할 수을 필요로 할 것이다, null로 동일합니다.
코드 블록 : 당신이 그것을 할당하기 전에 i
의 값에 액세스를 시도하고 있기 때문에
int i;
if(i == 0)
{
// something...
}
이 컴파일시 오류가 발생합니다. 이는 객체에도 적용됩니다 (시작하려면 null
으로 초기화 할 수 있지만).
초기 할당에서 수정했는지 알고 싶다면 처음 할당이 후속 할당에 의해 반복되지 않는 감시 값으로 지정되어 있지 않으면 직접 지정할 방법이 없습니다. 그렇지 않은 경우 추적하려면 추가 bool
이 필요합니다.
질문이 모호하기 때문에 충돌하는 답변이 나타납니다. "초기화"는 해결하려는 문제에 따라 다른 것을 의미 할 수 있습니다. – egrunin
마찬가지로, "변수"라는 단어는 다른 것을 의미 할 수 있습니다.클래스, 속성 또는 메서드 내부의 로컬 변수에 대한 필드를 말하고 있습니까? – StriplingWarrior