2013-10-10 2 views
1

Null을 허용하지 않는 객체의 컬렉션을 반복하는 동안 Null 예외가 발생합니다.Null 참조 목록 반복시 예외가 발생했습니다. <T>

List<ReconFact> facts = new List<ReconFact>(); 
// ...populating facts 

int count = 0; 

foreach (var fact in facts) 
{ 
    Console.WriteLine(++count); 
    try 
    { 
    context = AddToContext(context, fact, count, 100, true); 
    } 
    catch (Exception e) 
    { 
    Console.WriteLine(e.Message); // Null Exception Raised at some point 
    } 
} 

어떻게 가능합니까? 목록을 반복하는 것이 null 요소를 제공 할 수 있다는 것을 알지 못했습니다. 정상적인 동작입니까? 목록을 채울 때 null 항목을 추가 할 수 있습니까?

+0

http://msdn.microsoft.com/en-us/library/3wcytfd1.aspx 예 및 예 –

+5

AddToContext() 함수에서 무엇을하고 있습니까? – ckv

+1

예외가 던져지는 곳을 알아 내야합니다. 그러면 잡히지 않은 곳에서 문제를 볼 수 있습니다. 어쩌면 그것은 null ReconFact 참조가 아니지만 ReconFact의 어떤 것이 null입니까? – Ralf

답변

4

예, 에 null을 추가 할 수 있습니다. 여기에서 T은 참조 유형입니다. 당신은 단지 첫 번째를 확인할 수 있습니다

List<ReconFact> facts = new List<ReconFact>(); 
facts.Add(null); 

:

foreach (var fact in facts.Where(f => f != null)) 
// ... 
2

예, List에는 null이 포함될 수 있으므로 배열 및 여러 다른 컬렉션을 포함 할 수 있습니다. iterating 자체가 중단되지는 않지만 null이 아닌 요소에 의존하는 { } 내부의 모든 코드가 손상됩니다. 편집

List<String> s = new List<String>(); 
s.Add("foo"); 
s.Add(null); 
s.Add("bar"); 

을 : 대기, 당신은 "nullable이 아닌 객체"에 의해 무엇을 의미합니까?

+0

Null을 허용하지 않는 객체 란 Nullable 유형이 아닌 객체를 의미합니다.

+0

구조체 또는 클래스입니까? 클래스는 참조 유형이므로 'Nullable '이 아니더라도 null 일 수 있습니다. 사실, 컴파일러는'Nullable'에 대한 참조 타입을 거부합니다. – Medinoc

0

나는 문제가 논리에서 생각 아무것도에서 사람을 방해하지 않습니다. fact이라는 Recontent 목록을 초기화하기 만하면됩니다. 항상 0이됩니다. 확인하십시오.

관련 문제