phil.o
Попробуйте привести элементы коллекции объектов обратно к целым числам:
Dim FB As Integer = Enumerable.Range(0, Integer.MaxValue).Except(ListBox1.Items.Cast(Of Integer)()).FirstOrDefault()
Однако это может не сработать, в зависимости от того, как вы заполнили список.
Edit: после нескольких секундных попыток загрузка в память диапазона более 2 миллиардов целых чисел может оказаться не самой лучшей идеей. Вы могли бы попробовать это вместо этого:
Public Function GetFirstAvailable() As Integer
Dim list as New List(Of Integer)(ListBox1.Items.Cast(Of Integer)())
For i As Integer = 0 To Integer.MaxValue
If Not list.Contains(i)
Return i
End If
Next
Return -1 '' Have a way to tell there wasn't any available positive integer, even if it is not likely
End Function
Dim FB As Integer = GetFirstAvailable()
Richard Deeming
Enumerable.Range
не загружает список в память; он оценивается лениво.
Except
делает храните копию всех отдельных элементов из второго списка, который, по сути, является тем, что ваш GetFirstAvailable
метод-это делание.
опорный источник[^]
Если вы использовали ListBox1.Items.Cast(Of Integer).Except(Enumerable.Range(0, Integer.MaxValue))
, затем у тебя будут проблемы с памятью. :)
NB: Вам нужно переместить Return -1
за пределами города For
петля.
phil.o
Спасибо, Ричард, я исправил расположение возвратного заявления. Спасибо также за уточнения по поводу Enumerable.Range
поведение.