Wie kann man ein Objektarray in C# Ausgeben?
public array[] bits = new array[8];
Ich habe eine Methode geschrieben die diese Objekte befüllt. Nun möchte ich die ToString() Mehtode überschreiben und den Inhalt der einzelnen arrays ausgeben. Wie geht das? Der Inhalt dieser Objekte ist var
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).
In diesem konkreten Fall mit der Substring-Methode.
char decoded = bin.Substring(0, 1)[0];
Sie greift den ersten Buchstaben heraus.
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?
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
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.
also ich kann einfach override toString() und drunter schreiben
Console.Wirteline(Klassenname)
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.
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.
Wenn ich nun aber folgendes habe
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?