0

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

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

Почему?

ответ

2

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.

+0

Ahhh ... право, конечно. Я пытался быть умным, делая все в одном заявлении. Ваш пример - это то, как я обычно это делал. –

+0

И это проще читать! –

+0

и в двух строчках короче! Ну, если вы поместите строку 'If' за' = '. –

Смежные вопросы