iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 11
0
Software Development

轉職初新者系列-C#初學攻略心法系列 第 11

[2018鐵人賽Day11]C#初學攻略心法-箱子的進階奧秘

  • 分享至 

  • xImage
  •  

咦?
那我想指定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; //顯示容量用

https://ithelp.ithome.com.tw/upload/images/20171230/20091333V9IajY2hAA.jpg

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; //目前列表詳細內容

https://ithelp.ithome.com.tw/upload/images/20171230/20091333hpKkEYChBI.jpg

Step4.
設置載入程式時,需要顯示的數值

label2.Text = count.ToString(); //目前容量
label4.Text = count.ToString(); //容量還剩
ArrayData();

https://ithelp.ithome.com.tw/upload/images/20171230/20091333iQrY7FHzSz.jpg

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();

https://ithelp.ithome.com.tw/upload/images/20171230/20091333hzzB4zXUj9.jpg

Step6.
Button2的取出事件修正,並加入try-catch驗證

string GetString = Interaction.InputBox("取出物品鍵值", "取出鍵值", "", -1, -1);

//驗證是否有找到值,如錯誤則跳出錯誤訊息
try
{
    MessageBox.Show("取出物品:" + BoxArray[GetString]);
}
catch (Exception ex)
{
    MessageBox.Show("Exception Message: " + ex.Message, "錯誤訊息");
}

https://ithelp.ithome.com.tw/upload/images/20171230/20091333h1j9m1uylg.jpg

Step7.
按下F5,先執行存入按鈕事件,再嘗試取出的按鈕事件
取出時,要是鍵入不同的值,則會跳出try-catch的錯誤訊息提示

https://ithelp.ithome.com.tw/upload/images/20171230/200913332fuXAeSRNT.jpg

https://ithelp.ithome.com.tw/upload/images/20171230/20091333q6c8alTIfm.jpg

https://ithelp.ithome.com.tw/upload/images/20171230/20091333uaGXkzQHcz.jpg

https://ithelp.ithome.com.tw/upload/images/20171230/20091333DH6oalg398.jpg

==============================

看來這乾坤盒的隱藏功能還蠻不錯用的
有時間要再來深究一下,說不定還有意想不到的功能呢

筆者云:快累死了,今天就饒了我吧,我也想偷懶一下~

參考資料:
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


上一篇
[2018鐵人賽Day10]C#初學攻略心法-箱子的奧秘
下一篇
[2018鐵人賽Day12]C#初學攻略心法-尼瑪的,變異計算骷顱王
系列文
轉職初新者系列-C#初學攻略心法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言