1

我想允许用户在搜索鸭嘴兽时输入鸭嘴兽的 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,因为它是不可为 null 的类型。

这个 kvp 的实例化然后分配给它可以吗,如果不是,我该如何解决它?

4

2 回答 2

3

这个 kvp 的实例化然后分配给它可以吗,如果不是,我该如何解决它?

好吧,没关系- 但你可能想要:

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

这样,它显然只分配了一次,但总是被分配。接下来,您需要确定在not的情况下您希望它具有什么价值。drDialogResult.OK

于 2012-07-09T17:15:18.443 回答
1

如果您的 KeyValuePair 为空有意义,则将其声明为可为空:

KeyValuePair<int, String>? kvp = null;

但请确保稍后在代码中正确使用可空性(完全是一个词)。

编辑:

利用它现在拥有的属性

kvp.HasValue;
kvp.Value;

和方法

kvp.GetValueOrDefault();

于 2012-07-09T17:18:12.130 回答