Abfrage eines Strings der Methodengruppe "ToString"

Michael-D

Cadet 3rd Year
Registriert
Nov. 2023
Beiträge
35
Guten Abend Zusammen,

schon hab ich das Kapitel Methoden und Variablen schon etwas verstanden, da taucht wieder was neues am Horizont auf.
Ich wollte mal etwas ausprobieren, um an die Daten für die OS Info zu kommen...

Code:
OperatingSystemos = Environment.OSVersion;
...
Console.WriteLine("OS SP: " + os.ServicePack.ToString())

Nun hab ich mal etwas herumgespielt und mal versucht, die Variable os.ServicePack.ToString so abzufragen...
Wenn die Variable os.ServicePack.ToString leer ist (also keinen Inhalt ist), dann schreibe "Nichts vorhanden"

Dann hab ich folgendes versucht...
Code:
if (os.ServicePack.ToString "")...


und VS quittierte dies mit der Meldung 'Die Methodengruppe "ToString" kann nicht in den NichtDelegattyp "bool" konvertiert werden...'
Das ich jetzt überhaupt nichts mehr verstehe, na ja, wohl verständlich :(

Das einzige, was ich weiß, ist, das ToString eine wichtigs Formatierungsmethode im .NET Framework und ein Objekt in seine String-Darstellung umwandelt, so dass es für die Anzeige geeignet ist.

Kann man denn da überhaupt nix machen? Wieso denn "bool" Von True oder False ist doch gar nicht die Rede. Es ist doch ein String! Oder übersehe ich da etwas?

Micha :)
 
Michael-D schrieb:
if (os.ServicePack.ToString "")
Du musst auch einen Vergleich machen. Beachte das doppelte Istgleich.
Code:
if (os.ServicePack.ToString() == "")
oder (hat den Charme, dass es auch NULL abfängt)

Edit: os.ServicePack ist schon ein String!
public string ServicePack { get; }
also:
Code:
if (os.ServicePack == "")
ToString() sollte man eher sparsam einsetzen. Ein Fall wäre zB. wenn man ein Int oder Float mit einem String vergleichen will.

Michael-D schrieb:
Wieso denn "bool" Von True oder False ist doch gar nicht die Rede.
In einem If-Statement muss immer eine Bool Expression raus kommen.
Wenn(wahr/falsch) dann sonst (if then else)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: fexxianosch, Michael-D und Raijin
Michael-D schrieb:
die Variable os.ServicePack.ToString
Das ist keine Variable, sondern eine Methode. Eine Variable speichert Daten wie zB eine Zahl oder eben einen String. Eine Methode tut etwas. Dahinter steckt also eine Aktion, die durchaus auch mit Variablen arbeitet.


Michael-D schrieb:
VS quittierte dies mit der Meldung 'Die Methodengruppe "ToString" kann nicht in den NichtDelegattyp "bool" konvertiert werden...'
Klar, weil die Methode ToString() einen String zurückgibt und das if-Konstrukt in Klammern eine boolesche Bedingung erwartet, also einen Vergleich, der true oder false zurückgibt.

Michael-D schrieb:
if (os.ServicePack.ToString "")...
Damit hast du theoretisch einfach nur zwei String hintereinandergeschrieben. So wie "Michael" "Frank". Und nun? Was sollte damit passieren? "Wenn Michael Frank dann"? Du musst also schon "Michael" mit "Frank" vergleichen, zB mit == wie @zenokortin es schon gezeigt hat. Dieser Vergleich resultiert dann in "Ist gleich" aka true oder "ist nicht gleich" aka false und damit kann if weitermachen.


Michael-D schrieb:
Das einzige, was ich weiß, ist, das ToString eine wichtigs Formatierungsmethode im .NET Framework und ein Objekt in seine String-Darstellung umwandelt, so dass es für die Anzeige geeignet ist.
Jein. Die ToString() Methode macht zunächst einmal nicht das, was du vielleicht glaubst. Ohne dass man in einer Klasse definiert was die ToString() Methode tun soll, wird die ToString() der Basisklasse verwendet, object. Dort ist ToString() so definiert, dass der Klassenname zurückgegeben wird.

Code:
class Person {
   string name;
  int alter;
}

hat auch eine ToString() (von object) und wenn man sie aufruft, kommt sinngemäß "Person" raus, die Klasse. Erst dann, wenn man in einer Klasse explizit die ToString() mit override überschreibt und ihr sagt, dass sie zB return String.Format("{0} ist {1} Jahre alt", name, alter); machen soll, wird die ToString() der Klasse Person auch genau das zurückgeben.
Gehe daher nie davon aus, das ToString() einen ganz bestimmten String zurückgibt, wenn dies nicht in der Klasse definiert ist oder du anderweitig weißt was bei ToString() tatsächlich rauskommt.

Wenn du ToString() auf einen String anwendest, ist das natürlich auch wenig sinnvoll wie @zenokortin auch schon angemerkt hat.
 
  • Gefällt mir
Reaktionen: Ranayna, Michael-D, f00bar und eine weitere Person
zenokortin und Raijin: Vielen lieben Dank für Eure Antworten. Es gibt noch soooo viel zu lernen, aber alles wird man auch nicht in den Kopf reinkriegen. Man sagt ja auch "Man muss nicht alles wissen, aber schon wo alles steht...". Aber nett das einem hier wirklich geholfen wird!!!

Also Profis seit Ihr wirklich. Meinen Repekt ;)
 
  • Gefällt mir
Reaktionen: zenokortin und Raijin
Das ist nun mal die ComputerBase Community - beschde der Welt :schluck:
 
Zurück
Oben