2010-07-06 2 views
6

질문 : C#에서 변수 (문자열 또는 int/double 유형) 또는 배열 (문자열 또는 int/double 유형)을 초기화 할 수 있습니까?C#에서 변수 또는 배열 초기화 여부를 확인하는 방법

미리 감사드립니다.

+3

질문이 모호하기 때문에 충돌하는 답변이 나타납니다. "초기화"는 해결하려는 문제에 따라 다른 것을 의미 할 수 있습니다. – egrunin

+0

마찬가지로, "변수"라는 단어는 다른 것을 의미 할 수 있습니다.클래스, 속성 또는 메서드 내부의 로컬 변수에 대한 필드를 말하고 있습니까? – StriplingWarrior

답변

6

일부 초기화가 보장됩니다. 정적 또는 인스턴스 멤버의 경우 유형 또는 인스턴스가 명시 적 또는 암시 적으로 구성 될 때 모든 변수가 자동으로 초기화됩니다 (이 경우 default(Type)이 값이므로 숫자 유형의 경우 0, 문자열 및 기타 참조 유형의 경우 null 등) .

로컬 변수의 경우 선언 전에 사용할 수 없으므로 로컬 변수를 검사 할 수 있으면 초기화됩니다.

+0

게시물 주셔서 감사합니다. 그러나, 내 문제는 변수의 가능한 값이 초기화 된 값과 동일한 0이 될 수 있다는 것입니다. – Mavershang

+0

@ user208080 : 요점은 변수 *가 초기화된다는 것입니다. * user-initialized *를 의미하는 경우, 아니오, 사용자가 직접 추적하지 않는 한이를 확인할 방법이 없습니다. –

+1

Int32와 같은 기본 유형에 해당 값이 설정되어 있는지 확인하려는 경우 null 허용 유형을 사용하십시오. 그런 다음 코드에서 다른 값으로 설정하지 않은 경우 null 참조를 갖습니다. – HCL

0

아니요. 그러나 로컬 변수 인 경우 컴파일러 오류가 발생합니다. 클래스 멤버 인 경우 자동으로 기본값 (int의 경우 0, 객체의 경우 null)으로 초기화됩니다.

+0

인스턴스가 동적으로 작성되고 경우에 따라 널 (null) 만 발생하는 경우 컴파일러는이 인스턴스를 선택하지 않습니다. 테스트 케이스에 포함시키지 않으면 오류가 발생할 수 있습니다. – Roast

+0

@Lily, "인스턴스가 동적으로 생성됩니다"및 "null은 특정 경우에만 발생합니다"에 대해 어떻게 이야기하고 있습니까? 정적 변수 또는 인스턴스 변수에 대해 이야기하고 있습니까? "컴파일러가 가져 가지 않으면"어떻게됩니까? 변수를 사용하려고하면 런타임 오류가 발생합니까? – tster

0

뺨에 혀, 정확한 대답

는 소스 코드를 스캔하고 선언에서 하나 초기화, 또는 다른 곳을 사용하기 전에 보장되어 있는지 확인하기 위해 변수의 모든 용도와 선언을 찾을 수 있습니다.

+1

... 또는 컴파일러가이 작업을 수행하므로 컴파일 만 시도 할 수 있습니다. –

+0

+1 @Adam; 말이된다. –

+0

코드에서 모든 경로를 거치지 않는 한 컴파일러가 감지하지 못하는 순간이 있습니다. 이 경우 프로그램으로 완료 한 점검이 필요합니다. 예를 들어, 모든 객체가 인스턴스화되지 않는 객체 배열입니다. for 루프를 수행하고 각 객체를 호출하면 ... – Roast

1

,이 시도 :

If var = NULL Then 
MsgBox ('Not initialized') 
End If 
2

예하실 수 있습니다.

요청할 때 인스턴스 (문자열 또는 배열)가 필요한 유형의 경우 null인지 확인할 수 있습니다.

당신이 여러 가지를 할 수 있지만, 한 가지 방법은 다음과 같습니다

if (myObject == null) 
{ 
    //initialize it here 
} 

기본 데이터 형은 인스 턴싱을 필요로하지 않습니다. 예 :

int i;

못해이 같 0

+0

사실, 모든 변수를 액세스하기 전에 모든 변수를 초기화해야하기 때문에 컴파일 타임 오류가 발생합니다 ('int i;'). – Donnie

+0

"초기화되지 않음"은 "null이 아닌"것과 동일하지 않습니다. –

1

C# 당신이 읽을 전에 모든 변수가 어떤 값으로 초기화 할 수을 필요로 할 것이다, null로 동일합니다.

코드 블록 : 당신이 그것을 할당하기 전에 i의 값에 액세스를 시도하고 있기 때문에

int i; 
if(i == 0) 
{ 
    // something... 
} 

이 컴파일시 오류가 발생합니다. 이는 객체에도 적용됩니다 (시작하려면 null으로 초기화 할 수 있지만).

초기 할당에서 수정했는지 알고 싶다면 처음 할당이 후속 할당에 의해 반복되지 않는 감시 값으로 지정되어 있지 않으면 직접 지정할 방법이 없습니다. 그렇지 않은 경우 추적하려면 추가 bool이 필요합니다.

관련 문제