2013-10-10 28 views
1

我在遍歷非空對象的集合時收到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 
    } 
} 

這怎麼可能?我不知道遍歷列表可以提供空元素是一個正常的行爲?填充列表時是否可以添加空項目?

+0

http://msdn.microsoft.com/en-us/library/3wcytfd1.aspx,是和是 –

+5

你在做什麼AddToContext()函數? – ckv

+1

你應該找出Exception拋出的位置,然後你可能會看到問題,而不是它被抓到的地方。也許它不是一個空的ReconFact引用,但ReconFact中的某些內容爲空? – Ralf

回答

4

是的,可以將null添加到List<T>,其中T是引用類型。沒有什麼能阻止有人從:

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

你可以簡單地檢查第一:

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

是的,List可以包含空值,所以可以包含數組和其他幾個集合。 它不會破壞迭代本身,但會破壞{ }中依賴於該元素不爲null的任何代碼。

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

編輯:等待,什麼叫 「非空的對象」 是什麼意思?

+0

非空對象我的意思是非空類型的對象'可爲空' –

+0

但是它們是結構還是類?類是引用類型,所以它們可以爲空,即使不是「可空」'。實際上,編譯器會拒絕任何嘗試'Nullable'的引用類型。 – Medinoc

0

我認爲這個問題是在你的邏輯。您只需初始化名爲fact的Recontent的列表。 所以所有的時間都是0,請檢查一下。