我有以下内容:
KeyValuePair<string, string>? myKVP;
// code that may conditionally do something with it
string keyString = myKVP.Key;
// throws 'System.Nullable<System.Collections.Generic.KeyValuePair<string,string>>'
// does not contain a definition for 'Key'
我确信这有一些原因,因为我可以看到该类型可以为空。是因为我在null
可能导致不良事件发生时尝试访问密钥吗?
答案 0 :(得分:22)
请改为尝试:
myKVP.Value.Key;
以下是System.Nullable<T>
的精简版:
public struct Nullable<T> where T: struct
{
public T Value { get; }
}
由于Value
属性的类型为T
,因此必须使用Value
属性来获取正在使用的包装类型实例。
修改:我建议您在使用HasValue
之前检查可空类型的Value
属性。
if (myKVP.HasValue)
{
// use myKVP.Value in here safely
}
答案 1 :(得分:0)
这是因为可以为可空类型分配空值或实际值,因此您必须在所有可空类型上调用“.value”。 “.value”将返回基础值或抛出System :: InvalidOperationException。
您也可以在可空类型上调用“.HasValue”以确保为实际类型指定了值。