Почему нельзя использовать "?" оператор для обнуляемого типа - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть эта строка кода

Dim result = myStuff.FirstOrDefault(Function (t) t.PrimaryKey = mine.ID?.Value)

Правая сторона ID имеет Integer?, а левая сторона всегда integer.

Но это говорит о том, что не может разрешиться. Value

1 Ответ

3 голосов
/ 28 апреля 2020

Чтобы извлечь Integer из Integer?, необходимо указать запасное значение, которое будет использоваться в случае, если Integer? равно Nothing. Метод GetValueOrDefault делает именно это.

См. Следующий пример:

Dim x As Integer? = 7
Dim y As Integer? = Nothing
Dim z As Integer = 7

Console.WriteLine(If(z = x.GetValueOrDefault(-1), "yes", "no")) ' Prints yes
Console.WriteLine(If(z = y.GetValueOrDefault(-1), "yes", "no")) ' Prints no

Однако, если вам нужно только сравнить Integer с Integer?, не нужно ничего извлекать. Вы можете сравнивать их напрямую.

Dim x As Integer? = 7
Dim y As Integer? = Nothing
Dim z As Integer = 7

Console.WriteLine(If(z = x, "yes", "no")) ' Prints yes
Console.WriteLine(If(z = y, "yes", "no")) ' Prints no

Оператор безопасной навигации (используемый в вашем фрагменте кода) просто разрешит значение Nothing, если его операнд также Nothing. Не похоже, что вы хотите здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...