2016-04-29 10 views
1

Ich habe ein Array, die diese WerteSo löschen Sie Werte von Array in VB.Net

{1, 5, 16, 15}

ich das erste Element gelöscht werden soll, so dass die Werte jetzt sind.

{Null, 5, 16, 15}

Ich möchte dann wieder durch gehen und löschen Sie den ersten Nicht-Null-Wert, die ergeben würde:

{Null, Null, 16, 15}

Wie kann ich das in VB-Code?

+0

Was ist die Art der Elemente der 'myArray'? –

Antwort

3

Versuchen Sie, diese

Dim i As Integer 

For i = 0 To UBound(myArray) 
    If Not IsNothing(myArray(i)) Then 
     myArray(i) = Nothing 
     Exit For 
    End If 
Next i 

als @ Andrew Morton erwähnt, kann ein normaler Integer-Wert nicht Null (Nothing) sein. Es gibt einen nullbaren Integer-Typ Integer?, der auf einen Null-Wert (Nothing in diesem Fall) festgelegt werden kann. Der obige Code wäre nur dann angemessen, wenn das Array Integer? Werte anstelle eines Integer Wertes hätte.

+1

Haben Sie diesen Code getestet? Hast du bemerkt, dass die Elemente, die du auf "Nothing" gesetzt hast, als null anstatt "Nothing" herausgekommen sind? –

+0

Ich konnte diesen Code nicht testen. Ich nahm an, dass er ein "Integer" verwendete, wenn er sie auf Null setzen wollte. Ich hätte klarstellen sollen, mein Fehler. –

3

Eine Ganzzahl in VB.NET ist ein Werttyp. Wenn Sie versuchen, es auf Nothing festzulegen (in VB.NET gibt es keine null), nimmt es seinen Standardwert, der für eine ganze Zahl Null ist.

Sie können stattdessen eine Nullable(Of Integer) verwenden, die auch als Integer? geschrieben werden kann.

Als Demonstration:

Option Infer On 
Option Strict On 

Module Module1 

    Sub Main() 
     Dim myArray As Integer?() = {1, 5, 16, 15} 

     For j = 1 To 3 

      For i = 0 To UBound(myArray) 
       If myArray(i).HasValue Then 
        myArray(i) = Nothing 
        Exit For 
       End If 
      Next i 

      ' show the values... 
      Console.WriteLine(String.Join(", ", myArray.Select(Function(n) If(n.HasValue, n.Value.ToString(), "Nothing")))) 

     Next 

     Console.ReadLine() 

    End Sub 

End Module 

Ausgänge:

Nichts, 5, 16, 15
Nichts, Nichts, 16, 15
Nichts, nichts, nichts, 15

Wenn Sie sich für den Unterschied zu C# interessieren, siehe z. B. Why can you assign Nothing to an Integer in VB.NET?

0
Dim strArray() As Integer = {1, 5, 16, 15} 
Dim strValues = strArray().ToList 
Dim index = 3 
strValues = strValues.Where(Function(s) s <> strValues(index)).ToArray 

Versuchen Sie dies wird Ihnen helfen.

0

Sie können so etwas wie folgt verwenden:

Dim myArray(3) As Integer 
    myArray(0) = 1 
    myArray(1) = 2 
    myArray(2) = 3 
    myArray(3) = 4 
myArray = removeVal(myArray, 2) 

-

Function removeVal(ByRef Array() As Integer, ByRef remove As Integer) As Integer() 
    Array(remove) = Nothing 
    Return Array 
End Function