如果将key声明为可空,我们怎样才能从字典中获取值?

时间:2016-07-14 05:25:11

标签: c#

我有一个场景,其中属性被定义为null able int,我有字典,其中键和值被加载。我想通过给出一个可以为null的键类型的键来获取值,如果key为null或key在字典中不存在然后字典返回默认值。

这是一个例子

public partial class Form1 : Form
{
    Dictionary<int, string> students = new Dictionary<int, string>()
{
    { 111, "a"},
    { 112, "b"},
    { 113, "c"}
};
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        int? a;
        a = 111; //this value is coming from somewhere else and it can be null
        string student = students[a];
    }


}

如果我们定义int?一个;如int a;然后它没有给出错误。但我必须使“a”变量为null能够。 请帮帮我。

1 个答案:

答案 0 :(得分:4)

如何处理可空类型:

您需要Value属性:

string student = students[a.Value];
  

如果指定了一个值,则Value属性返回一个值。否则,一个   抛出System.InvalidOperationException。

或者将字典更改为可以为空的密钥:

Dictionary<int?, string> students = new Dictionary<int?, string>()
{
     { 111, "a"},
     { 112, "b"},
     { 113, "c"}
};

或者,如果您需要检查Nullable变量是否具有值

string student = null;
if (a.HasValue)
    student = students[a.Value];
else
{
    // do something about it
}
  

如果变量包含值,则HasValue属性返回true,   如果为空则为false。

回答您的主要问题:

以上所有内容都是使用Nullable类型编译代码,至于检查字典中是否存在值,您可以使用TryGetValue遵循此方法:

string student = null;

if(a.HasValue && students.TryGetValue(a.Value, out student))
{
    // key found and Value now stored in student variable
}
else
{
    // key not found, student is null
}

注意:上面假设字典仍然定义为Dictionary<int, string>。这就是我们进行a.HasValue检查的原因。