我想允许用户在搜索鸭嘴兽时输入鸭嘴兽的ID或名称(或名称的一部分)。
数据库现在已经关闭了,所以我无法测试这段代码,但是我分配给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 :(得分:3)
这是kvp的实例化,然后分配给它好吗,如果没有,我该如何解决呢?
嗯,好的 - 但你可能想要:
KeyValuePair<int, String> kvp;
using (...) {
kvp = dr == DialogResult.OK ? getPlatypusIDAndNameDlg.PlatypusKVP
: /* some other value here */;
}
这样,它显然只分配了一次,但总是分配。接下来,您需要计算出dr
不是DialogResult.OK
时的想要的价值。
答案 1 :(得分:1)
如果KeyValuePair为null是有意义的,那么将其声明为可为空:
KeyValuePair<int, String>? kvp = null;
但请确保您稍后在代码中正确使用可空性(这完全是一个单词)。
编辑:
利用它现在具有的属性
kvp.HasValue;
kvp.Value;
和方法
kvp.GetValueOrDefault();