2016-07-10 7 views
0

Я устанавливаю элементы массива в Nothing, если те же элементы в другом массиве - Nothing. (по разным причинам я не могу клонировать массив). Оба массива - это тип объекта. Однако, когда элементы в первом массиве Objx (i, j) равны 0, логический оператор оценивает значение Nothing и устанавливает элемент второго массива в Nothing. Почему нулевой элемент в массиве типа объекта, который не имеет значения?Нулевой элемент в массиве типа объекта, который не имеет значения

For i = 1 To NumRecords 
    For j = 1 To NumFields 
    If objx(i, j) = Nothing Then x(i, j) = Nothing 
    Next 
Next 

Кроме того, существует необходимость использовать недостающий код данных, чтобы проверить, если элементы массива давал отсутствуют, и, следовательно, должен быть установлен в настоящее время, если отсутствует правда.

Dim MissingDataCode As Object = Nothing 
For i = 1 To NumRecords 
    For j = 1 To NumFields 
     If objx(i, j) Is MissingDataCode Then x(i, j) = Nothing 
     'If objx(i, j) = MissingDataCode Then x(i, j) = Nothing (does not work) 
    Next 
Next 

Теперь, если пользователь должен недостающий код данных, который будет установлен на -9999, и, следовательно, устанавливает:

MissingDataCode = -9999 

будет следующий быть в состоянии поймать значения -9999 и установить второй массив в Nothing?

If objx(i, j) = MissingDataCode Then x(i, j) = Nothing 

или если строка кода будет

If objx(i, j) Is MissingDataCode Then x(i, j) = Nothing 
+0

Какие типы массивов? Основные типы, такие как integer, используют Nothing как значение по умолчанию (0). Например, 'Dim arryx (1, 1) As Int32' создаст массив со всеми элементами 0 (по умолчанию). – Plutonix

+2

Включите опцию Strict On и измените сравнение с If objx (i, j) Nothing. X (i, j) = Nothing – dbasnett

+0

Они оба являются объектными массивами. – wrtsvkrfm

ответ

0

РЕШЕНИЕ: если переменная типа Object используется, чтобы поймать значения отсутствующего кода данных, а затем два, если заявления должны быть использованы:

Dim MissDataCode As Object = Nothing 

If objx(i, j) = MissDataCode And MissDataCode IsNot Nothing Then x(i, j) = Nothing 
If objx(i, j) Is MissDataCode And MissDataCode Is Nothing Then x(i, j) = Nothing 

Это предотвратит установку нуля в массиве objx (i, j) в ничто. Однако, если MissDataCode = 0, то в любое время objx (i, j) = 0 результат будет оцениваться как отсутствующий и установить второй элемент массива x (i, j) в Nothing.

Вышеуказанные две линии будут работать для любых случаев, например .:

Dim MissDataCode As Object = Nothing 
Dim MissDataCode As Object = -9999 
Dim MissDataCode As Object = "NA" 
Dim MissDataCode As Object = 0 
Dim MissDataCode As Object = "" 

Note, будет иметь место случаи, когда входной ноль означает, что данные отсутствуют.

1

Не используйте = Nothing для сравнения и используйте вместо этого Is Nothing. Вот несколько примеров:

Dim o As Object 
Console.WriteLine(o = Nothing) ' True 
Console.WriteLine(o Is Nothing) ' True 

o = 0 
Console.WriteLine(o = Nothing) ' True 
Console.WriteLine(o Is Nothing) ' False 

o = "" 
Console.WriteLine(o = Nothing) ' True 
Console.WriteLine(o Is Nothing) ' False 

Редактировать Мой плохо .. Я не заметил вторую часть, которая была добавлена ​​к этому вопросу. Также вы можете найти это интересное What is the difference between And and AndAlso in VB.NET?

+0

Если у вас есть опция Strict On; использование '= Nothing' с переменной' Object' запрещено; но нет проблем с '= Nothing' для заданного типа, если мы понимаем, что это действительно означает. – Sehnsucht

+0

Это правда, однако вопрос заключается в использовании« MissDataCode », который, когда true, устанавливает другой массив в Nothing. В РЕШЕНИИ, приведенном ниже, если 'objx (i, j) = - 9998', то значение действительно и не является недостающим числом. Однако, если пользователь помещает -9999 в данные для представления отсутствующих, тогда 'objx (i, j) = -9999' и использование' MissDataCode = -9999' будет оцениваться как true. В приведенном выше коде нет способа определить, что -9998 не является отсутствующим значением. – wrtsvkrfm

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

  • Нет связанных вопросов^_^