Первый операнд в двоичном выражении If должен поддерживать значение NULL или быть ссылочного типа
Обновлен: Ноябрь 2007
First operand in a binary 'If' expression must be nullable or a reference type
Выражение If может принимать два или три аргумента. При передаче двух аргументов, первый аргумент должен быть ссылочного типа или поддерживать значение NULL. Если первый аргумент принимает значение, отличное от Nothing, возвращается его значение. Если первый аргумент принимает значение Nothing, то вычисляется и возвращается значение второго аргумента.
Например, следующий код содержит два выражения If, одно с тремя аргументами и другое с двумя. Выражения вычисляют и возвращают одно и то же значение.
' firstChoice is a nullable value type.
Dim firstChoice? As Integer = Nothing
Dim secondChoice As Integer = 1128
' If expression with three arguments.
Console.WriteLine(If(firstChoice IsNot Nothing, firstChoice, secondChoice))
' If expression with two arguments.
Console.WriteLine(If(firstChoice, secondChoice))
Следующие выражения вызывают эту ошибку.
Dim choice1 = 4
Dim choice2 = 5
Dim booleanVar = True
' Not valid.
'Console.WriteLine(If(choice1 < choice2, 1))
' Not valid.
'Console.WriteLine(If(booleanVar, "Test returns True."))
Идентификатор ошибки: BC33107
Исправление данной ошибки
Если не удается изменить код так, чтобы первым аргумент являлся ссылочным типом или поддерживал значение NULL, рассмотрите возможность преобразования к выражению If с тремя аргументами или к оператору If...Then...Else.
Console.WriteLine(If(choice1 < choice2, 1, 2)) Console.WriteLine(If(booleanVar, "Test returns True.", "Test returns False."))