咦?
那我想指定Key的話呢?
感覺這樣應該會安全一點,不然誰只要有我的箱子,就可取出東西了
這樣太危險,不保險!!
==============================
在C#裡,陣列要自行指定Key的方法是有的,Dictionary就可以達到我們的需求唷
Dictionary<TKey,TValue>
表示索引鍵和值的集合
[使用方法]
初始化 Dictionary< TKey, TValue > 類別的新執行個體
Dictionary<Key值類型, Value值類型> 變數名稱 = new Dictionary<Key值類型, Value值類型>();
將指定的索引鍵和值加入字典。
變數名稱.Add(TKey, TValue)
將具有指定索引鍵的值從 Dictionary< TKey, TValue > 中移除
變數名稱.Remove(TKey)
從 Dictionary< TKey, TValue > 移除所有索引鍵和值
變數名稱.Clear()
取得 Dictionary< TKey, TValue > 中所包含的索引鍵/值組數目
變數名稱.Count
來讓我們直接跳入實作的部分,體驗一下吧
[Step by Step簡易實戰]
Step1.
請開啟Day10方案
Step2.
初始化Dictionary與預設值
會出現錯誤訊息,依照提示引入修正即可
//初始化Dictionary
Dictionary<string, string> BoxArray = new Dictionary<string, string>(); //箱子
int count = 10; //顯示容量用
Step3.
修正ArrayData()內容,取得Dictionary內的Key,Value
需使用KeyValuePair定義可設定或擷取的索引鍵/值組
string tmpString = "";
foreach (KeyValuePair<string, string> GetBoxArray in BoxArray)
{
tmpString += "第" + GetBoxArray.Key + "空間位置 => " + GetBoxArray.Value + Environment.NewLine;
}
label5.Text = tmpString; //目前列表詳細內容
Step4.
設置載入程式時,需要顯示的數值
label2.Text = count.ToString(); //目前容量
label4.Text = count.ToString(); //容量還剩
ArrayData();
Step5.
Button1的存入事件修正為有兩個詢問視窗,並加入到BoxArray內
string SaveKey = Interaction.InputBox("存入物品鍵值", "存入鍵值", "", -1, -1); //-1表示在螢幕中間
string SaveName = Interaction.InputBox("存入物品名稱", "存入名稱", "", -1, -1); //-1表示在螢幕中間
//驗證是否為空
if (!String.IsNullOrEmpty(SaveKey) && !String.IsNullOrEmpty(SaveName))
{
BoxArray.Add(SaveKey, SaveName); //加入值到BoxArray
count--;
label4.Text = count.ToString(); //容量還剩
}
else if (count <= 0)
{
MessageBox.Show("可儲存的容量不足", "Error Message");
}
//重新取得清單
ArrayData();
Step6.
Button2的取出事件修正,並加入try-catch驗證
string GetString = Interaction.InputBox("取出物品鍵值", "取出鍵值", "", -1, -1);
//驗證是否有找到值,如錯誤則跳出錯誤訊息
try
{
MessageBox.Show("取出物品:" + BoxArray[GetString]);
}
catch (Exception ex)
{
MessageBox.Show("Exception Message: " + ex.Message, "錯誤訊息");
}
Step7.
按下F5,先執行存入按鈕事件,再嘗試取出的按鈕事件
取出時,要是鍵入不同的值,則會跳出try-catch的錯誤訊息提示
==============================
看來這乾坤盒的隱藏功能還蠻不錯用的
有時間要再來深究一下,說不定還有意想不到的功能呢
筆者云:快累死了,今天就饒了我吧,我也想偷懶一下~
參考資料:
Microsoft Dictionary< TKey, TValue > 類別
https://msdn.microsoft.com/zh-tw/library/xfhwa508(v=vs.110).aspx#%E5%BB%BA%E6%A7%8B%E5%87%BD%E5%BC%8F
Microsoft KeyValuePair< TKey, TValue > 結構
https://msdn.microsoft.com/zh-tw/library/5tbh8a42(v=vs.110).aspx