Почему nullable KeyValuePair <,> не имеет ключевого свойства?
У меня есть следующее:
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
может привести к возникновению плохих вещей?
Ответы
Ответ 1
Попробуйте это вместо:
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
}
Ответ 2
Это потому, что для типов с нулевым значением может быть назначено нулевое значение или фактическое значение, поэтому вам нужно вызывать ".value" для всех типов с нулевым значением. ".value" вернет базовое значение или выбросит исключение System:: InvalidOperationException.
Вы также можете вызвать ".HasValue" в типе с нулевым значением, чтобы удостовериться, что существует значение, присвоенное фактическому типу.