Поскольку у двух исходных массивов могут быть разные верхние границы, вам придется выполнять итерацию, используя старшее из двух значений, а также избегать доступа к индексам за пределами более короткого массива
Dim arr1() As String = {"a", "b", "c", "d"}
Dim arr2() As String = {"a", "x", "x", "b", "z"}
Dim arr3(arr1.Length + arr2.Length - 1) As String
Dim iDestination As Integer = 0
For i As Integer = 0 To Math.Max(UBound(arr1), UBound(arr2))
If i <= UBound(arr1) Then
arr3(iDestination) = arr1(i)
iDestination += 1
End If
If i <= UBound(arr2) Then
arr3(iDestination) = arr2(i)
iDestination += 1
End If
Next
Это чередует результаты, как вы сделали.
Если чередование не требуется, и вы просто заинтересованы в результате (а не в алгоритме), вы можете просто сделать:
Dim arr1() As String = {"a", "b", "c", "d"}
Dim arr2() As String = {"a", "x", "x", "b", "z"}
Dim r = From s In arr1.Concat(arr2)
Group By s Into Group, Count()
Where Count = 1 Select s
Order By s
Возвращает элементы, встречающиеся ровно один раз в arr1
или arr2
.