Ничто сравнение не дает несоответствие типов - PullRequest
3 голосов
/ 26 декабря 2011

Я пытаюсь проверить, является ли свойство Listivew.Tag ничем.

Я использовал проверку «Ничего» универсально для всех сценариев в качестве первой проверки, чтобы избежать ошибок

Может кто-нибудь объяснить, как это сделать в VB 6?

 If Not .lvwLocation.Tag Is Nothing Then
    'COMPANY
    str = str & IIf(Len(.lvwLocation.Tag) > 0, " and u.location_id in " & .lvwLocation.Tag, "")
End If

выдает ошибку 'несоответствие типов'

Ответы [ 2 ]

9 голосов
/ 26 декабря 2011

Nothing - допустимое значение для Object переменных, а Is - способ сравнения указателей объектов.

Но свойство Tag элемента управления VB6 является String, а VB6 - Stringтип не является объектом;это примитивный тип .Это означает, что строковая переменная не может быть назначена Nothing - ее самое пустое возможное значение - пустая строка.(И переменной Object нельзя присвоить значение String.) Для строк просто используйте те же операторы равенства / неравенства / сравнения, которые вы используете для других примитивных (числовых / логических / даты) типов:

If .lvwLocation.Tag <> "" Then ...
2 голосов
/ 26 декабря 2011

В VB6 кажется, что использование Is Nothing для сравнения Objects работает, все остальные типы данных, которые я пробовал, не были. В .Net Nothing представляет значение по умолчанию для любого типа данных и будет работать так, как вы ожидаете.

Dim test as Object

If Not test Is Nothing Then
   /////  
End If

Так как кажется, что тип данных свойства th Tag в VB6 является строкой. Я бы использовал что-то вроде:

If .lvwLocation.Tag <> "" Then      
    /////
End If
...