2011-02-24 55 views
1

首先你好,這是我在這個論壇上的第一篇文章。數組問題 - 關於索引。 c#

我正在完成一個IT項目第二年的項目。這是一場火的洗禮,因爲它是C#中的tcp/ip實用程序,也是我第一年在Java基礎模塊中進行編程的唯一其他經驗。

我的問題是,我的程序的一部分使用NetworkAdapter類可用性屬性記錄NIC卡錯誤代碼。我製作了一組錯誤代碼描述,因爲它們不會自動返回代碼。很明顯,數組是基於0,代碼從1開始,我不得不將空值作爲數組中的條目。有更強大的解決方案還是唯一的方法?我問,因爲我明白數組中的空值是不被接受的。

string[] availabilityArray = new string[] {"", "Other", "Unknown", "Running or Full Power", "Warning", "In Test", "Not Applicable", "Power Off", "Off Line", "Off Duty", "Degraded", "Not Installed", "Install Error", "Power Save - Unknown" + "\n" +"The device is known to be in a power save state, but its exact status is unknown.", "Power Save - Low Power Mode" + "/n" +"The device is in a power save state, but still functioning, and may exhibit degraded performance.", "Power Save - Standby" + "/n" +"The device is not functioning, but could be brought to full power quickly.", "Power Cycle", "Power Save - Warning" + "/n" + "The device is in a warning state, though also in a power save state.",}; 

非常感謝

+0

是連續值無覆蓋差距?即。你有錯誤代碼1-N而不是1-4,10-18,100-199等。 – 2011-02-24 12:51:14

+0

順便說一句,這不是一個空引用;它是一個空字符串。 – Ani 2011-02-24 12:53:01

+0

^^^感謝指出:) – 2011-02-24 13:27:36

回答

1

有多種方式來處理這個問題:

  1. 保持你的第一個元素
  2. 減去1從每個錯誤代碼查找它之前:

    string text = availabilityArray[errorCode - 1]; 
    
  3. 使用字典:

    Dictionary<int, string> availability = new Dictionary<int, string> 
    { 
        { 1, "Other" }, 
        { 2, "Unknown" }, 
    }; 
    

    這也將處理的空白,你可以很容易地跳到碼10在上面的列表中,並繼續,但你需要明確的代碼來檢測錯誤代碼是否存在於詞典:

    string text; 
    if (availability.TryGetValue(errorCode, out text)) 
        // is there 
    else 
        // is not 
    
3

你的解決方案是確定。您可以使用Dictionary<int, string>

0

,而不是使用數組,你可以使用:

Dictionary<int, string> 

這樣你就可以在某種程度上是獨立於集合的索引映射你的錯誤代碼和消息。

0

在默默無聞的名字,你應該能夠使在C#1個索引數組:

Array.CreateInstance(typeof(string), new[] { 100 /* array length */ }, new { 1 } /* offset */); 
+0

這是我最初尋找的東西,但從我讀過的東西來看,這不是一個好的行業實踐,因爲編程人員追隨我(假裝在工作的現實世界中即時通訊..大聲笑)將推定基地0.但是,謝謝,這是有用的知道:) – 2011-02-24 13:02:11

+0

是的,你不應該玩默認數組索引。我的示例在多維數組的某些用途中有一些優點,但更喜歡像字典這樣的查找方法。 – Holstebroe 2011-02-24 13:18:17

0

使用枚舉

enum Availability 
     { 
      Other = 1, 
      Unknown, 
      Running_or_Full_Power, 
      Warning, In_Test, 
      Not_Applicable, 
      Power_Off, 
      Off_Line, 
      Off_Duty, Degraded 
     };