2012-07-09 20 views
1

我希望允許用戶在搜索Platypus時輸入Platypus的ID或名稱(或名稱的一部分)。Instantiation其次是作業編譯,但

數據庫現在正在運行,所以我無法測試這段代碼,但我分配給kvp兩次的事實看起來不正確。總之,第一我的代碼:

String SearchVal = textBoxPlatypusNumOrPartialName.Text.Trim(); 
int PlatypusID; 
int.TryParse(SearchVal, out PlatypusID); 

Dictionary<int, string> CandidatePlatypusDict = PlatypusID > 0 ? PlatypusSetupData.GetPlatypusById(PlatypusID) :  PlatypusSetupData.GetCandidatePlatypusFromName(SearchVal); 

KeyValuePair<int, String> kvp = new KeyValuePair<int, string>(); 
using (var getPlatypusIDAndNameDlg = new GetPlatypusForm(CandidatePlatypusDict)) { 
    DialogResult dr = getPlatypusIDAndNameDlg.ShowDialog(); 
    if (dr == DialogResult.OK) { 
     kvp = getPlatypusIDAndNameDlg.PlatypusKVP; 
    } 
} 

...現在,如果我嘗試這個:

KeyValuePair<int, String> kvp; // = new KeyValuePair<int, string>(); 

我得到:

我 「未分配的局部變量 'KVP' 的使用」不能將null分配爲KeyValuePair,因爲它是非空類型。

這是kvp的實例,然後賦值給它,如果沒有,我該如何解決它?

+0

可能出現[KeyValuePair的默認值](http://stackoverflow.com/questions/1641392/the-default-for-keyvaluepair) – 2012-07-09 17:15:33

+0

出於興趣,爲什麼使用keyvaluepair作爲搜索結果?例如,您是否可以沒有List ?它簡化了許多這類問題,因爲你只處理鴨嘴獸的時候 - 這就是你正在尋找的東西。我真的很喜歡你們的這些問題! – dash 2012-07-09 17:21:59

+0

@ - :謝謝,但爲什麼(你喜歡他們)? – 2012-07-09 17:32:07

回答

3

這是kvp的實例化,然後賦值給它,如果沒有,我該如何解決它?

那麼它的 - 但你可能反而想:

KeyValuePair<int, String> kvp; 
using (...) { 
    kvp = dr == DialogResult.OK ? getPlatypusIDAndNameDlg.PlatypusKVP 
           : /* some other value here */; 
} 

這樣,它顯然只分配一次,但總是分配。接下來,您需要計算出希望dr不是DialogResult.OK的情況下具有的價值。在後面的代碼

KeyValuePair<int, String>? kvp = null; 

但可以肯定您使用可空(這是完全一個字)正確:

1

如果是有意義的,你的KeyValuePair爲空,則其聲明爲空。

編輯:

利用性能,它現在將有一個像

kvp.HasValue; 
kvp.Value; 

和方法

kvp.GetValueOrDefault();