Wie kann man ein Objektarray in C# Ausgeben?

3 Antworten

Der Inhalt dieser Objekte ist var

Jede Variable in C# hat einen Datentyp. Das Schlüsselwort var jedoch ist kein konkreter Typ sondern eine Kurzschreibweise, die dir ermöglicht, auf der linken Seite die Angabe des (oft längeren Typnamens) gegen das kürzere Schlüsselwort (var) auszutauschen.

Beispiel:

var word = ""; // short form
string word = ""; // long form

Der Typ von word wird im ersten Fall vom Compiler via Typinterferenz ermittelt. Dazu wird der rechtsseitige Ausdruck ausgewertet und ein passender Typ gesucht. Aus diesem Grund würden diese Anweisungen:

var word;

var word = null;

nicht funktionieren. Der Compiler hätte keinen Ansatzpunkt, um einen Typ für die Variable festzulegen.

Wie kann man ein Objektarray in C# Ausgeben?

In deinem Beispiel ist ersichtlich, dass deine Variable bits ein Array an Objekten vom Typ array speichert. Das heißt, du musst eine Klasse namens array angelegt haben. In dieser solltest du die ToString-Methode überschreiben, die angibt, wie ein einzelnes array-Objekt textuell repräsentiert werden kann (ein plumpes Beispiel hatte ich dir ja schon einmal gezeigt). Nur du kannst wissen, wie das aussehen soll, denn du hast diese Klasse schließlich auch entworfen.

Die Ausgabe des kompletten Arrays lässt sich via Schleife lösen:

foreach (var element in array)
{
  Console.WriteLine(element);
}

Die WriteLine-Methode wird intern versuchen, das Objekt, welches ihm übergeben wird (element) in einen String zu konvertieren. Dabei wird die ToString-Methode des Objekts aufgerufen.

Wenn du über einen ToString-Aufruf ein komplettes Array ausgeben lassen wolltest, solltest du dir einen Wrappertyp anlegen.

Beispielimplementation:

class ArrayCollection
{
  private array[] _elements;

  public ArrayCollection(array[] elements)
  {
    _elements = elements;
  }

  public override string ToString()
  {
    if (_elements == null)
    {
      return string.Empty;
    }

    return string.Join(Enviroment.NewLine, _elements);
  }
}

Anwendung:

var bits = new array[8];
// fill array ...
var collection = new ArrayCollection(bits);
Console.WriteLine(collection);

Der Wrapper beinhaltet das Array an array-Objekten, via Konstruktor kann man es setzen. In der ToString-Methode werden alle Elemente in array zu Strings konvertiert (sie rufen jeweils ihre eigene ToString-Methode auf) und jeweils mit einem Zeilenumbruch dazwischen zusammengefügt (das macht die Join-Methode).

CodenLernen 
Fragesteller
 17.11.2021, 07:55

Wenn ich nun aber folgendes habe

Public myByteMessage endcode (Chip sequenz, char c) 
{
string bin="0"; 
bin+=ToString(c,2);

Wie Wandele ich nun bin wieder zurück? Bzw wie mache ich die Methode wieder rückgängig und erhalte meinen true und false wert zurück?

0
regex9  17.11.2021, 10:27
@CodenLernen

In diesem konkreten Fall mit der Substring-Methode.

char decoded = bin.Substring(0, 1)[0];

Sie greift den ersten Buchstaben heraus.

0
regex9  17.11.2021, 10:32
@regex9

Ach Quatsch, nur der Indexer reicht völlig.

char decoded = bin[0];
0
CodenLernen 
Fragesteller
 17.11.2021, 11:10
@regex9

Das heißt wenn ich c in binär umwandeln würde, würde irgendeine 1011 Kombination bei rauskommen. Wenn C nun der char 't' ist wurde durch char decoded tatsächlich das t wieder rauskommen?

0
CodenLernen 
Fragesteller
 17.11.2021, 16:02
@regex9

Kann nicht implizit in char konvetiert werden

0
regex9  17.11.2021, 19:44
@CodenLernen

Nein. Diese Schlussfolgerung kann ich gerade auch nicht nachvollziehen.

Du erstellst hier einen String:

string bin="0";

und hängst an diesen noch irgendeinen anderen String:

bin += ToString(c, 2);

Der Schritt zurück (zu "0") ist also die Auswahl des ersten Buchstabens.

Wenn du hingegen ein Zeichen zu einer Binärzahl konvertieren würdest, müsste diese lediglich als numerischer Typ vorliegen (wie int). Dann ist auch eine Konversion zurück zu char möglich.

int tAsBinary = 0b1110100;
char t = (char) tAsBinary;
Console.WriteLine(t); // t
0

Bin mir nicht sicher...Du könntest eine Klasse erstellen, die von Array erbt. Darin überschreibst du die ToString-Methode. Du verwendest dann nicht Array sondern deine neue Klasse.

CodenLernen 
Fragesteller
 16.11.2021, 21:42

also ich kann einfach override toString() und drunter schreiben
Console.Wirteline(Klassenname)

0
Matto247  16.11.2021, 22:11
@CodenLernen

Du müsstest das zurückgeben, was du aus deinem Array ausgeben möchtest. Also: Return xyz. Natürlich kannst du auch was in die Console schreiben.

0

Könntest du das näher erklären. In deinem Beispiel erstellst du ein simples Array mit 8 Byte Länge. Du könntest eine kleine foreach Schleife basteln und den Inhalt jedes Bytes im Array via console.writeline ausgeben.

Woher ich das weiß:Studium / Ausbildung – Staatlich geprüfter Techniker Automatisierung