我有一个场景,其中属性被定义为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能够。 请帮帮我。
答案 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
检查的原因。