2016-06-22 6 views
1

매우 이상한 문제가 있습니다. 문제는 재미 있고 단순 해 보이지만 나를 화나게합니다. 두 개의 null 입력 가능 정수를 추가 할 수 없습니다.

는 난이 클래스의 객체 (additionalCell)의 배열과 currentPixelTotalCell라는 동일한 클래스의 다른 목적을
public int? count { get; set; } 

선언되는 클래스의 널 정수를 갖는다. 배열에있는 모든 객체의 count 변수 값을 추가하여 currentPixelTotalCell의 count 변수에 저장하려고합니다.

내 코드는 다음과 같습니다. 하지만 디버깅 할 때 모든 개체의 카운트 변수가 null이 아닌 값을 가지지 만 루프가 종료 된 후에 만 ​​왼손 파트의 값이 null로 표시됩니다.

for(int i = 0; i < 5; i++) 
{  
    currentPixelTotalCell.count += additionalCell[i].count; 
} 

왜 이런 생각입니까? 그들을 추가하는 다른 방법이 있습니까? 나는 우둔 해.

편집 :

언급이를 잊어 버렸습니다. 중단 점을 가지고 처음 반복을 체크 할 때 더할 나위가 없습니다. 예 : additionalCell [0] .count가 10 인 경우 currentPixelTotalCell.count의 값은 첫 번째 반복에서 내부 행이 실행 된 후에 만 ​​null로 사용됩니다. 당신이 결과로 null이있는 경우

+0

:

모든이가 말했다되고, 최종 솔루션은 무언가 같이해야합니다. '.count' 대신'.count.Value'가되어야합니다. –

+0

@ LukaJacobowitz : 값이 없으면 예외를 throw합니다. 이것이 OP가 원하는 것인지 확실하지 않습니다. –

답변

3

currentPixelTotalCell.count 변수를 먼저 0으로 초기화해야합니까?

currentPixelTotalCell.count = 0; 
for(int i = 0; i < 5; i++) 
{  
    currentPixelTotalCell.count += additionalCell[i].count; 
} 

또는 AdditionalCell 개체에서 null 값을 확인해야 할 수도 있습니다.

for(int i = 0; i < 5; i++) 
{  
    currentPixelTotalCell.count += (additionalCell[i].count ?? 0) 
} 
+0

나는 두 가지 모두를 할 필요가있는 것처럼 보입니다. 답변 해주셔서 감사합니다. – vinmm

2

  • 어느 currentPixelTotalCell.count
  • additionalCell [I] .count의 일부 null 모두 null 제어

    아래에 있는지 확인 null

입니다

// currentPixelTotalCell.count is not null 
    currentPixelTotalCell.count = 0; 

    for(int i = 0; i < 5; i++) 
    {  
     // if additionalCell[i].count is null treat it as 0 
     currentPixelTotalCell.count += additionalCell[i].count ?? 0; 
    } 
,

당신은 대안으로 Linq에을 시도 할 수 있습니다 :

currentPixelTotalCell.count = additionalCell 
    .Take(5) // if you want take just first 5 items 
    .Sum(item => item ?? 0); 
2
가 당신의 내면의 루프를 변경

:

currentPixelTotalCell.count += (additionalCell[i].count ?? 0); 

가 오른 손잡이 값 중 하나가 null의 경우에 null로 총을 설정 피하기 위해.

1

값 중 하나가 null이기 때문에 결과는 null입니다.

currentPixelTotalCell.count += additionalCell.Select(x => x.count) 
               .Where(x => x.HasValue) 
               .Sum(); 

또는

currentPixelTotalCell.count += additionalCell.Sum(x => x.count ?? 0); 

어딘가에 currentPixelTotalCell.count를 초기화 또는 간단한 과제 =에 의해 +=을 대체하는 것을 잊지 마십시오에 대해 어떻게

.

0

는 당신에게 Nullable<T>의 기본값을 줄 것이다 .GetValueOrDefault()라는 방법이있다. 당신은 값이 null 경우 그것의 사용은 0을 할당 할 수 있습니다 :

for(int i = 0; i < 5; i++) 
{  
    currentPixelTotalCell.CmvF =currentPixelTotalCell.CmvF.GetValueOrDefault() + additionalCell[i].CmvF.GetValueOrDefault(); 
} 
1

당신은 그것을 accesing 전에 0으로 currentPixelTotalCell.count를 초기화해야합니다.

는 " 가 + = B는" " A = A + B"단지 문법 설탕이 있음을 기억하십시오.

a가 null이기 때문에 "a = null + b"이고 null에 무언가가 같음을 나타냅니다.

또한 동일한 제약으로 인해 오른쪽의 값도 null이 아닌지 확인해야합니다. 귀하의 경우이 작업을 수행하는 더 쉬운 방법은 단순히 GetValueOrDefault 메서드를 사용하는 것입니다. 당신이 널 (NULL) 값을 추출 할 필요가

currentPixelTotalCell.count = 0; 
for(int i = 0; i < 5; i++) 
{  
    currentPixelTotalCell.count += additionalCell[i].count.GetValueOrDefault(); 
} 
관련 문제