Benutzer mit den meisten Antworten
Eigene DynamicArray Library: MissingMemberException bei Reverse()

Frage
-
Hallo,
ich habe eine DynamicArray Klasse geschrieben, in ihr wird ein normales Basic Array gespeichert, welches bei Inhaltsanpassungen mit ReDim neu initialisiert und von einem CachedArray die zuvor erhaltenen Werte zurückerhält (ist er kleiner, so viele wie möglich; ist er größer, alle und den Rest gleich Nothing).
Nun habe ich eine Methode übersetzt namens Reverse(), es wird der Array in der DynamicArray Klasse Reversed, in einen DynamicArray übertragen und per Funktion returned.
Doch bei jedem Aufruf der Reverse() Methode der DynamicArray Klasse erhalte ich eine MissingMemberException, woran könnte dies liegen?
Grüße,
Euer Joe (Joern Akkermann)
Antworten
-
Danke Elmar
Thema Workaround:
Ich habe die Reverse Methode nicht in die DynamicArray Klasse geschrieben, sondern in die Klasse in welcher ich diese brauche, bisher, danke für die vielen Antworten!
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 14. Januar 2016 08:35
Alle Antworten
-
Hi,
poste doch bitte mal den relevanten Code und prüfe, an welcher Stelle genau der Fehler auftritt.
Wichtig wäre bspw. der Code deiner DynamicArray Klasse (vor allem die Deklaration, Inherits, Implements, usw. und natürlich auch deine Reverse Methode)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Die ganze DynamicArray Klasse:
Public Class DynamicArray Public DynArray(0) As Object Sub New(length As Integer) ReDim DynArray(length) For counter = 0 To length DynArray(counter) = Nothing Next End Sub Sub New(ParamArray ByVal values() As Object) ReDim DynArray(values.Length() - 1) For counter = 0 To DynArray.Length - 1 DynArray(counter) = values(counter) Next End Sub Default Public Property Access(ByVal index As Integer) As Object Get Return DynArray(index) End Get Set(value As Object) If index > DynArray.Length() - 1 Then AddLength(index - DynArray.Length()) End If DynArray(index) = value End Set End Property Sub AddLength(length As Integer) Dim CacheArray(DynArray.Length() - 1) As Object For counter = 0 To CacheArray.Length() - 1 CacheArray(counter) = DynArray(counter) Next ReDim DynArray(CacheArray.Length() + length) For counter = 0 To CacheArray.Length() - 1 DynArray(counter) = CacheArray(counter) Next End Sub Sub SubLength(length As Integer) ReDim DynArray(DynArray.Length() - 1 - length) End Sub Sub SetLength(length As Integer) If DynArray.Length < length Then AddLength(length - DynArray.Length - 1) Else ReDim DynArray(length) End If End Sub Sub Append(value As Object) AddLength(1) DynArray(DynArray.Length() - 1) = value End Sub Function Length() As Integer Return DynArray.Length() End Function Function Contains(value As Object) As Boolean Return DynArray.Contains(value) End Function Function Reverse() As Object Dim reverseDynArray = DynArray.Reverse().ToArray() Dim returnDynamicArray = New DynamicArray(0) For counter = 0 To reverseDynArray.Length() - 1 returnDynamicArray(counter) = reverseDynArray(counter) Next Return returnDynamicArray End Function Function ToArray() As Array Return DynArray End Function End Class
Das Problem
Dim DynamicArrayOne = New DynamicArray(0) ' adding items to DynamicArrayOne Dim OneReverse = DynamicArrayOne.Reverse()
System.MissingMemberException @ DynamicArrayOne.Reverse()
- Bearbeitet Joern 'Joe' Akkermann Mittwoch, 6. Januar 2016 05:02
-
Hallo Joern Akkermann,
Würdest Du das Workaround näher beschreiben, weil es für künftige Leser des Threads, die auch dieses Problem umgehen möchten, hilfreich sein wird?
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo Joe,
wie sieht denn dein Workaround aus? Wenn ich deinen Code in ein neues Projekt kopiere läuft er ohne Probleme.
Wenn die Klasse in einer DLL liegt deutet die Exception darauf hin, dass diese nicht neu erstellt wurde und das Programm versucht die Funktion in der alten DLL aufzurufen. Hierbei sollte aber eigentlich auch der Compiler einen Fehler ausgeben.Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo Joern,
abgesehen davon, das ein "Dynamisches Array" durch eine List(T) bereits wesentlich effizienter abgewickelt wird - und ich rate Dir dringend Dich mit den Standard-Auflistungen zu beschäftigen, anstatt solche Eigengewächse zu produzieren:
Die Reverse Methode, die Du einsetzt, erfordert Enumrable.Reverse aus System.Linq. Was fehlschlagen kann, wenn man .NET 2.0 einsetzt, da die Methode erst ab 3.5 existiert.
Und wenn man mit Option Strict Off unterwegs ist schlägt einem schon mal eine MissingMember Ausnahem um die Ohren wenn die VB "Intelligenz" am Ende ist.
Abseits davon wäre die Implementation von Reverse effizienter implementiert als:
Function Reverse2() As Object Dim reverseDynArray = New Object(DynArray.Length - 1) {} Array.Copy(DynArray, reverseDynArray, DynArray.Length) Array.Reverse(reverseDynArray) Return reverseDynArray End Function
Was aber im Prinzip das dabei eingesetzt Array.Reverse alleine leisten könnte.
Gruß Elmar
-
Danke Elmar
Thema Workaround:
Ich habe die Reverse Methode nicht in die DynamicArray Klasse geschrieben, sondern in die Klasse in welcher ich diese brauche, bisher, danke für die vielen Antworten!
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 14. Januar 2016 08:35