2016-07-12 6 views
0

Ich vergleiche 2 DLL, die ich nicht oft tun, und ich war verwirrt, wenn ich diese Linie sah:Warum wird diese Zeichenfolge in ein Objekt in der DLL umgewandelt?

myObj.ErrorString = (string) (object) num + (object) " file(s) failed to import. Run the Import Report for more information."; 

num ist ein int, die zu einem string dann zu einem object gegossen wird. Meine hartcodierte Zeichenfolge wird in eine object umgewandelt, um zu der num Variablen, die in eine Zeichenfolge konvertiert wurde, "hinzugefügt" zu werden.

Warum "fügt" der Compiler eine string und eine object hinzu? Wäre es nicht sinnvoller, wenn es (string)(object)num + (string)"some text"; wäre?

+1

Blick auf, wie String.Concat arbeitet; das könnte es für dich erklären; Auch dies ist ein gutes Beispiel, warum Sie bestimmte Dinge explizit umwandeln müssen, um Boxen usw. zu vermeiden. –

+0

@TheBeardedLlama Wie würde das alles erklären, es macht keinen Sinn. Es hat keinen Sinn, so herumzuboxen, am Ende ist es nur myObj.ErrorString = num + "file (s) ...."; – Dispersia

+0

Sie denken wie ein Mensch und nicht ein Computer: D – SQLMason

Antwort

-2

Der Aufruf von a + b wird vom Compiler in einen Aufruf von String.Concat() geändert. Die einzige Überschreibung dieser Methode, die Parameter eines akzeptablen Typs hat, ist String.Concat(Object, Object). Daher müssen beide Argumente in Object umgewandelt werden, bevor sie an die Methode übergeben werden können.

Für weitere Informationen schauen ein der Artikel verknüpft durch sstan-string = string + int: What's behind the scenes?

+0

@TheBardedLlama - Und warum nicht? –

+0

@Dispersia - wut? –

+0

@TheBardedLlama - Warum eine Frage nicht beantworten, auch wenn es sich um ein (Grenz-) Duplikat handelt? –

Verwandte Themen