2014-10-08 27 views
-2

我有一個包含不同服務的SQL表。每個服務都有一些特質(它意味着每一行,在SQL中有不同的列)。例如:NullReferenceException嘗試創建類的數組列表

S1:ID1,A1,B1(ID:INT,一:SMALLINT,B:真)

S2:ID2,A2,B2

...

我希望在c#中有這些服務的列表。

由於某些原因,每列都應該有一些屬性。例如:

對於A1表格S1,我們應該有這些:

a1.type,a1.typical,a1.min

這是我做過什麼:

public class ClsAdvertisement 
{ 
public string type { get; set; } 
public double typical { get; set; } 
public double min { get; set; } 
} 

protected void MyFuction() 
{ 
     List<ClsAdvertisement[]> services = new List<ClsAdvertisement[]>(); 
     SqlDataReader dr1 = cmd1.ExecuteReader(); 
     if (dr1.HasRows) 
     { 
     while (dr1.Read()) 
     { 
      ClsAdvertisement[] qualities=new ClsAdvertisement[3]; 

      if (dr1.IsDBNull(dr1.GetOrdinal("id")) == false) 
      { 
       qualities[0].typical = double.Parse(dr1["id"].ToString()); 
       qualities[0].type = "id"; 
       qualities[0].min = qualities[0].typical; 
      } 
      if (dr1.IsDBNull(dr1.GetOrdinal("a")) == false) 
      { 
       qualities[1].typical = double.Parse(dr1["a"].ToString()); 
       qualities[1].type = "a"; 
       qualities[1].min = qualities[1].typical - 1.0; 
      } 
      if (dr1.IsDBNull(dr1.GetOrdinal("b")) == false) 
      { 
       qualities[2].typical = double.Parse(dr1["b"].ToString()); 
       qualities[2].type = "b"; 
       qualities[2].min = qualities[2].typical - 1.0; 
      } 

      services.Add(new ClsAdvertisement[] { qualities[0], qualities[1], qualities[2] }); 
     } 
    } 
    if (dr1.IsClosed == false) dr1.Close(); 
} 

是這是做這件事的好方法嗎?

如果是的,我得到的錯誤

System.NullReferenceException:對象引用未設置到對象

在線的一個實例:

qualities[0].typical = double.Parse(dr1["id"].ToString()); 

從我搜索,我知道原因是沒有ClsAdvertisement []來設置典型的。但我不知道如何初始化這個?

請幫幫我。非常感謝。


請注意,我已閱讀此鏈接:「What is a NullReferenceException, and how do I fix it?」。我無法從這個鏈接中得到我的答案。我想知道我的方式是否好,如果是的話,如何初始化,這在鏈接中沒有提及。

+0

實例化數組中的對象。 – 2014-10-08 07:18:55

+0

看看:[什麼是NullReferenceException,我該如何解決它?](http:// stackoverflow。問題/ 4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – 2014-10-08 07:19:06

+0

我已經閱讀過此文。它說我應該初始化這個,並檢查它是否爲空。但它不適合我。它不是null。 ID有一些東西,我應該初始化這個。但我不知道如何。另一個問題是,我的方式是我三歲的好方法嗎?非常感謝 – 2014-10-08 07:22:41

回答

0

實例化對象也可以在實例化數組時完成。請注意,質量數組本身可以添加到服務列表中。第三個優化是DataReader的使用。

 List<ClsAdvertisement[]> services = new List<ClsAdvertisement[]>(); 
     using (IDataReader dr1 = cmd1.ExecuteReader()) 
     { 
      while (dr1.Read()) 
      { 
       ClsAdvertisement[] qualities = { new ClsAdvertisement(), new ClsAdvertisement(), new ClsAdvertisement() }; 

       if (!dr1.IsDBNull(dr1.GetOrdinal("id"))) 
       { 
        qualities[0].typical = double.Parse(dr1["id"].ToString()); 
        qualities[0].type = "id"; 
        qualities[0].min = qualities[0].typical; 
       } 
       if (!dr1.IsDBNull(dr1.GetOrdinal("a"))) 
       { 
        qualities[1].typical = double.Parse(dr1["a"].ToString()); 
        qualities[1].type = "a"; 
        qualities[1].min = qualities[1].typical - 1.0; 
       } 
       if (!dr1.IsDBNull(dr1.GetOrdinal("b"))) 
       { 
        qualities[2].typical = double.Parse(dr1["b"].ToString()); 
        qualities[2].type = "b"; 
        qualities[2].min = qualities[2].typical - 1.0; 
       } 

       services.Add(qualities); 
      } 
     } 
+0

非常感謝。這是對的,它是最好的。 – 2014-10-08 07:48:53

0

qualities[0]爲空。

第一行應修復:

qualities[0] = new ClsAdvertisement(); 
qualities[0].typical = double.Parse(dr1["id"].ToString()); 
qualities[0].type = "id"; 
qualities[0].min = qualities[0].typical; 

同樣地,對於所述陣列的所有其它元件。

+0

非常感謝。那是對的。 – 2014-10-08 07:48:24

0

問題很可能是您在填充其屬性之前未實例化有問題的對象。嘗試這樣做:

if (dr1.IsDBNull(dr1.GetOrdinal("id")) == false) 
    { 
     qualities[0] = new ClsAdvertisement(); 
     qualities[0].typical = double.Parse(dr1["id"].ToString()); 
     qualities[0].type = "id"; 
     qualities[0].min = qualities[0].typical; 
    } 
+0

非常感謝。那是對的。 – 2014-10-08 07:48:08

相關問題