Подтвердить что ты не робот

Почему 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 может привести к возникновению плохих вещей?

4b9b3361

Ответ 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" в типе с нулевым значением, чтобы удостовериться, что существует значение, присвоенное фактическому типу.