实例化后跟分配编译,但是

时间:2012-07-09 17:12:22

标签: c# generics dictionary reference

我想允许用户在搜索鸭嘴兽时输入鸭嘴兽的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的实例化,然后分配给它好吗,如果没有,我该如何解决呢?

2 个答案:

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

相关问题