2013-05-27 106 views
0

我收到以下錯誤:對象引用不設置到對象的實例[C#]

Object reference not set to an instance of an object

我不知道這是什麼錯誤,以及如何解決它的原因,這裏是我的代碼:

while(dr.Read()) 
    { 
    string variant = dr.GetString(0); 
    int size = dr.GetInt32(1); 
    int quantity = dr.GetInt32(2); 

    DataRow x = dt.Rows 
        .Cast<DataRow>() 
        .Where(r => r["variant_name"].Equals(variant) && r["size"].Equals(size)) 
        .FirstOrDefault(); 
        x["quantity"] = quantity;    

     } 

我得到這條線上的錯誤 - >x["quantity"] = quantity; 我不知道爲什麼它會給出一個空值,因爲我在我的數據庫覈對,它應該只返回一個匹配。

+2

非常直截了當......錯誤非常具有描述性 – Sayse

+2

'x'爲空,所以您的'Where'子句不會產生任何結果。 – Lee

回答

2

在最後一行x爲空,修復與

if(x != null) 
    x["quantity"] = quantity; 

出現這種情況,如果你的條件(。凡)不產生匹配。
在這一點上FirstOrDefault返回默認的部分
,這是一個參考目標的零作爲explained in MSDN

The default value for reference and nullable types is null.

+0

我檢查我的數據庫,它應該至少有一個匹配。 – Harvey

+0

對不起,先生......我不知道要在那行代碼中改變什麼。你覺得在那條線上有什麼錯誤?.Where'? – Harvey

+0

不,我正在考慮一個參考問題,但事實並非如此。你確定你的數據庫字段「variant_name」中的字符串是寫在你的測試條件的確切情況下(沒有空格或換行符) – Steve

3

如果沒有找到該元素,並嘗試訪問該對象FirstOrDefault返回null。

+0

先生,我已經檢查過我的數據庫,它應該至少給出一次匹配。 – Harvey

+0

嘗試在x [「quantity」] = quantity之前添加一個斷點;並檢查x的值。我很確定,當你得到這個錯誤時它是空的。 –

+0

我將如何添加斷點? – Harvey

0
while(dr.Read()) 
{ 
    string variant = dr.GetString(0); 
    int size = dr.GetInt32(1); 
    int quantity = dr.GetInt32(2); 

    DataRow x = dt.Rows 
       .Cast<DataRow>() 
       .Where(r => (r["variant_name"].ToString().Equals(variant) && Convert.ToInt32(r["size"]).Equals(size))) 
       .FirstOrDefault(); 

    if (x != null) 
    { 
     x["quantity"] = quantity; 
    }  
} 

謝謝你的回答,它幫了我很多。我只是稍微改了一行.Where,現在它適用於我。再次感謝你!

相關問題