2012-04-04 7 views
-1
int? _fileControlNo = null; 
    public int? FileControlNo 
    { 
     get { return _fileControlNo; } 
     set { _fileControlNo = value; } 
    } 

위의 속성에 null 값을 할당하면 구문 오류가 발생합니다. 내가 nullable 형식을 사용 치 형 객체에 null 값을 설정할 수있어 경우 오류가 발생하는 이유 C#에서 Null 가능 유형이란 무엇입니까?

objDPRUtils.FileControlNo =sArrElements.Value(3)==null ? null : Convert.ToInt32(sArrElements.Value(3)); 

하십시오

는 사람이 나에게 설명 할 수있다.

+3

작동합니다 null

위한 그것의 불가능 동일한 유형 및 귀하의 경우 결과를 반환 할 필요가 뭐죠 정확한 오류 메시지? –

+2

오류 란 무엇이며 sArrElements는 무엇입니까? – Justin

+0

''과 'int'사이의 암시 적 변환이 없기 때문에 '조건식 유형을 결정할 수 없습니다'라는 오류 메시지가 표시됩니다. \t' –

답변

8

조건부 연산자의 결과는 암시 적으로 서로 변환 할 수있는 동일한 유형 또는 유형이어야합니다.

귀하의 경우에는 nullInt32입니다. 이는 해당 요구 사항을 위반하는 것입니다.

대신 Int32 당신은 널 (NULL) Int32을 반환하는 경우

에서, null 암시 적으로이 형식으로 변환 할 수 있으며, 코드가 작동 (또는 또는, int?null 캐스트).

2

과 같이 직접 할당하여 null

objDPRUtils.FileControlNo =sArrElements.Value(3)==null ? (int?) null : Convert.ToInt32(sArrElements.Value(3)); 
0

int?하려고 캐스트 :

objDPRUtils.FileControlNo =sArrElements.Value(3); 
0

nullable 형식이 그들이 말하는 정확히 무엇 : 또한 null 값을 저장할 수있는 간단한 값 유형을 .
나는 코드의 마지막 줄이 전혀 필요 없다고 제안한다. 당신은 멀리로 얻을 수 있어야합니다 :

objDPRUtils.FileControlNo =sArrElements.Value(3); 

당신이 정말로, 널 (null)의 경우에 다른 값을 할당 널 병합 연산자를 사용하려면? 이 경우, 널 (null) 인 오른쪽의 경우에는 FileControlNo에 값 0을 할당 할

objDPRUtils.FileControlNo =sArrElements.Value(3)??0; 

.

0

코드가 null 유형을 혼합하고 Int32를 이와 같이 혼합 할 수 없습니다. 그들은 같은 유형이어야합니다.

당신이 int.TryParse을 사용 만이 같은 결과를 달성하고 있는지 확인하기 위해 필드에 HasValue을 사용할 수 있습니다 성공 값을 설정하려고 시도하는 경우는 일반적으로

바보를 사용하는 방법 nullable 형식 인 널 (null) 여부 예를

class Program 
{ 
    private static int? _fileControlNo; 

    static void Main(string[] args) 
    { 
     string[] sArrElements = new string[] { "1", "2", "3", null }; 

     int result; 
     if (int.TryParse(sArrElements[3], out result)) 
     { 
      FileControlNo = result; 
     } 


     if (_fileControlNo.HasValue) 
     { 
      // do something here 
     } 
    } 

    public static int? FileControlNo 
    { 
     get { return _fileControlNo; } 
     set { _fileControlNo = value; } 
    } 

} 

당신은 tryParse 항상 실패하기 때문에 _fileControlNo이 (인덱서를 변경하고 그 변경됩니다)을 설정할 수 없기 때문에이 경우 HasValue에 대한 테스트 내부의 코드가 실행되지 않을 것이라는 점을주의 할 것이다.

1

조건 연산자는이

sArrElements.Value(3)==null ? (int?)null : Convert.ToInt32(sArrElements.Value(3)); 
관련 문제