Почему нельзя вывести общий тип в бинарном операторе?

Я получаю предупреждение компилятора «Невозможно вывести общий тип; предполагается« Объект »». из следующего кода:

Dim occurrence As CacheableDocumentOccurrence = _
    If(DirectCast(IdentityMap.GetItem(id), CacheableDocumentOccurrence),
        Function() As CacheableDocumentOccurrence
            Dim x = New CacheableDocumentOccurrence()
            IdentityMap.Add(x)
            Return x
        End Function)

Почему?


person rory.ap    schedule 06.01.2015    source источник


Ответы (1)


Ваш оператор If возвращает CacheableDocumentOccurrence, если GetItem(id) возвращает не Nothing, но возвращает Function (лямбда-выражение) в противном случае! Вы должны вернуть CacheableDocumentOccurrence в обоих случаях.

Dim occurrence As CacheableDocumentOccurrence = DirectCast(IdentityMap.GetItem(id)
If occurrence  Is Nothing Then
    occurrence = New CacheableDocumentOccurrence()
    IdentityMap.Add(x)
End If 

Обратите внимание, что ваша функция — это не просто скобки вокруг кода. Это все равно не будет выполнено; вместо этого результатом будет функция AddressOf.

person Olivier Jacot-Descombes    schedule 06.01.2015
comment
Ааа... правильно, конечно. Я пытался быть умным, делая все в одном утверждении. Ваш пример - это то, как я обычно это делал. - person rory.ap; 06.01.2015
comment
и на две строчки короче! Ну, один, если вы поместите строку If за =. - person Olivier Jacot-Descombes; 06.01.2015