mikrocontroller.net

Forum: PC-Programmierung C# Enumeration als Rückgabewert


Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
eine Anfängerfrage:

folgendes Beispiel des Herstellers in VB:
Dim owd_enum As java.util.Enumeration
// enumerate through all the 1-Wire devices found (with Java-style enumeration)
owd_enum = adapter.getAllDeviceContainers

Wie deklariere ich das in C#? Bzw. in was speichere ich die Rückgabe?

Wenn ich eine enum in C# erstelle muss ich doch schon alle Elemente der 
Enum festlegen.
Bei der Rückgabe von getAllDeviceContainers() weiß ich doch aber gar 
nicht was da alles kommt? ODER?

Hier die Definition von getAllDeviceContainers:
Enumeration getAllDeviceContainers() throws OneWireIOException, OneWireException

// Returns an enumeration of OneWireContainer objects corresponding to all 
// of the iButtons or 1-Wire devices found on the 1-Wire Network.

// If no devices are found, then an empty enumeration will be returned. In 
// most cases, all further communication with the device is done through 
// the OneWireContainer.

Vielen Dank für deine Hilfe.

Autor: Rinde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du scheinst da was zu verwechseln: Ein Enum ist ein statischer Datentyp.
Was du brauchst ist eher ein dynamischer Container, wie z.B. eine List<>

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für deine Antwort,
aber ... wenn die die Rückgabe per Definition eine Enumeration ist, was 
soll ich dann mit einer Liste?

-> // Returns an enumeration of OneWireContainer

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ein Missverständnis.

"Enumeration" heisst zunächst einfach "Aufzählung"

Es gibt nun in C einen Typ enum, in dem integer-Werte aufgezählt und 
benannt werden können.

Anderersseits gibt es in Programmen hin und wieder die Notwendigkeit 
allgmein Dinge aufzuzählen, die nicht notwendigerweise integer sind bzw. 
deren Labels dynamisch erzeugt werden müssen. Dann benutzt man allgemein 
gesehen kann eine "Aufzählung" von Werten die auch ein Array oder eine 
Liste von Srings oder structs o.ä. sein kann.

Das ist also hier als Bezeichnung einer gewissen Zusammenstellung von 
Daten, nicht als Angabe eines Datentyps zu verstehen.

Autor: Rinde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir ziemlich sicher, dass hier mit enumeration eine Liste (oder 
etwas ähnliches) gemeint ist. Das entnehme ich dem von dir geposteten 
Kommentar.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um das von mir geschriebene noch zu verdeutlichen:

Ein ähnliches "Missverständnis" könnte man mit dem Wort "case" 
konstruieren.

Das heisst "Fall", und ist ja auch ein C-Schlüsselwort.

Dennoch folgt aus der Verwendung des Wortes in einem Prosatext über ein 
Programm, wie etwa "... in case n is even to seven" nicht 
notwendigerweise, das in dem Programm auch das Schlüsselwort case 
verwendet wird. Das sind einfach zwei verschiedene Sprachebenen, der 
Programmtext selbst und ein Text, der das Programm beschreibt. Da gibt 
es notwendigerweise Überschneidungen, eine Art "falsche Freunde".

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das C#-Pendant zu java.util.Enumeration ist 
System.Collections.Generic.IEnumerator. Beides sind generische Klassen 
mit deren Hilfe Du über die Elemente einer Collection iterieren kannst.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Enumeration ist in java eine schnitstelle,
mit dessen hilfe generische aufzählungen
durchlaufen werden (class Vector<T>)
und das hat nix mit einem enum zu tun.
lediglich die übersetzung deuted in beiden
fällen auf eine "aufzählung" hin.

Rinde (Gast) hat es bereits gesagt in C# kannst
du dafür die klasse List<T> verwenden.

Autor: Markus Volz (valvestino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ersetze in meinem letzten Beitrag Klassen durch Interfaces.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichworte u.a. IEnumerable und IEnumerator.
Hier reicht z.B.
    class DSPortAdapter {
        List<OneWireContainer> _container;
        // oder
        // OneWireContainer[] _container;
        // oder LinkedList etc. solange der Container IEnumerable implementiert 
        // Nimmt man keinen fertigen Container und implementiert das/die 
        // Interfaces, kann man die Ergebnisse auch erst bei der Anforderung
        // erzeugen und nicht wie hier vorher
        public IEnumerable<OneWireContainer> getAllDeviceContainers() {
            return _container;
        }
    }

    foreach (OneWireContainer oc in ds.getAllDeviceContainers()) {
        oc...
    }

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super, langsam kommt Licht ins Dunkle.
Hab das also zu wörtlich genommen mit der Enumeration.
Vielen Dank Euch allen.

Aber ...
ich muss für die API folgende Verweise ins Projekt einbinden:
oneWireApi.net und vjslib

Ich weiß jetzt, dass das C#-Pendant zu java.util.Enumeration die
System.Collections.Generic.IEnumerator ist. Danke.

Die API verlangt die Initialisierung (oder wie auch immmer) als 
java.util.Enumeration -> deshalb wohl auch die Einbindung von vjslib!!!

-> Dim Var_enum As java.util.Enumeration (VB Beispiel aus der API)

Frage:
Wie lautet das in C# ->> Dim Var_enum As java.util.Enumeration

Vielen Dank

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
adapter.getAllDeviceContainers();

VStudio sagt mir als Tip für die obere Zeile:

java.util.Enumeration DSPortAdapter.getAllDeviceContainers()

Deshalb meine ich ein Objekt zum abspeichern der Rückgabe vom Typ 
java.util.Enumeration zu benötigen.

evtl. hat Herr Arc Net im Post zuvor schon alles gesagt was nötig ist, 
bloß blick ichs nicht ;-)

Grüße 2all

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erzähl mal bitte was diese oneWireApi.net genau ist
und was du da vorhast.
vjslib ist für J#
gibt es die oneWire API nicht direkt als
C# version dann ist dieser umweg nicht nötig.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die API ermöglicht den Zugriff auf 1-Wire Devices von Maxim Dallas z.B. 
über einen USB Adapter.

Mit eigenen Worten würde bestimmt was fehlen ...

The Java class files from the 1-Wire API for Java were compiled in 
Microsoft J# to create the above .NET library.  Please see the OW.NET 
API Primer for a nice overview/tutorial of the assembly library and how 
to use. Also, make sure that the .NET framework version 2.0 and Visual 
J# redistributable version 2.0 Second Edition are installed prior to 
running or compiling the example programs.  These are available for 
download from Microsoft.  To create your own 1-Wire .NET program, create 
a Visual Studio 2005  project and simply add a reference to the 
OneWireAPI.NET.dll and vjslib (the J# redistributable) libraries.  Then 
start coding. The OneWireAPI.NET.dll library provides powerful 
"Container" classes that wrap the entire functionality of a 1-Wire 
device into easy-to-program methods and properties.

Beispiele sind bis auf eines alle in VB. Das eine C# Beispiel 
beantwortet nicht meine Frage.

Ich kann bisher ein Device an meinem Adapter erkennen und dessen 
Seriennummer auslesen. Supi

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul schrieb:
> adapter.getAllDeviceContainers();
>
> VStudio sagt mir als Tip für die obere Zeile:
>
> java.util.Enumeration DSPortAdapter.getAllDeviceContainers()
>
> Deshalb meine ich ein Objekt zum abspeichern der Rückgabe vom Typ
> java.util.Enumeration zu benötigen.
>
> evtl. hat Herr Arc Net im Post zuvor schon alles gesagt was nötig ist,
> bloß blick ichs nicht ;-)
>
> Grüße 2all

War halt die Frage was das werden sollte, eine Portierung der 
Java/VB-Sachen oder nur die Nutzung...
Wenn VS das sagt, dann sollte das so
    java.util.Enumeration result;
    result = ...getAllDeviceContainers();
gehen.
Obwohl... wenn ich mir das
http://www.maxim-ic.com/app-notes/index.mvp/id/155
so ansehe, hätte ich wahrscheinlich direkt auf TMEX aufgesetzt und nicht 
dieses merkwürde Konstrukt von Maxim genommen...

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Arc Net:
Vielen Dank - das war der Bringer. Einfach trivial.

Ich wollte halt mal in C#.
Ich dachte bei TMEX müsste ich C verwenden.
Wenn ich das so lese, hab ich mich wohl geirrt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.