Wie erstelle ich eine Erweiterungsmethode für ToString?
Ich habe dies ausprobiert:
public static class ListHelper
{
public static string ToString<T>(this IList<String> list)
{
return string.Join(", ", list.ToArray());
}
public static string ToString<T>(this String[] array)
{
return string.Join(", ", array);
}
}
Aber es funktioniert nicht, sowohl für string[]
und List<string>
. Vielleicht brauche ich einige Besondere Anmerkungen?
InformationsquelleAutor der Frage IAdapter | 2011-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erweiterung Methoden werden nur überprüft, wenn es kein geeigneter Kandidat Methoden entsprechen. Im Falle eines Aufrufs
ToString()
es wird immer werden die geltenden Kandidaten Methode, nämlich, dieToString()
aufobject
. Der Zweck von erweiterungsmethoden ist erweitern das set von Methoden zur Verfügung, auf eine Art, nicht zu überschreiben vorhandenen Methoden; das ist, warum Sie genannt werden "extension methods". Wenn Sie möchten, überschreiben Sie eine vorhandene Methode, dann haben Sie, um eine überschreibende Methode.InformationsquelleAutor der Antwort Eric Lippert
Klingt es wie Sie wollen, zu ersetzen, was
files.ToString()
gibt. Sie werden nicht in der Lage, das zu tun, ohne zu schreiben eine eigene Klasse zuweisenfiles
wie (d.h. Erben von der Liste und überschreibenToString()
.)Zuerst loswerden der generische Typ (
<T>
), Sie nutzen Sie nicht. Als Nächstes müssen Sie benennen Sie die extension-Methode aufrufen, weilfiles.ToString()
wird nur rufen Sie die Liste der ToString-Methode.Das tut, was Sie suchen.
InformationsquelleAutor der Antwort matt.dolfin
Einfach Sie Sollten nicht der name
ToString
für die Erweiterung der Methode wird nie aufgerufen, da diese Methode bereits existieren und sollten Sie nicht verwendenT
wie seine nutzlos da.Zum Beispiel habe ich versucht, und wieder ist es wieder die gleiche Sache:
Ausgabe:
also dieses mal habe ich
int
und es immer noch lief, weil das T hat keine andere Verwendung und ändern der Prototyp-Methode.So einfach, warum sind Sie mit
ToString
Literal als name der Methode, wie Sie bereits existieren, und Sie kann nicht außer Kraft gesetzt, es in eine Extension-Methode, das ist der Grund, Sie zu nutzen hatten, dieT
um es generisch. Verwenden Sie einige verschiedene Namen wieDass die Art und Weise, die Sie nicht haben, um generische, da es nutzlos und man kann Sie nennen, wie immer.
Sagte, dass Ihr code funktioniert für mich. hier ist, was ich versucht habe (in LINQPAD):
Und der Ausgang war
shekhar, shekhar, shekhar, shekhar
Da Sie angegeben haben, dass
T
imToString<T>
müssen Sie erwähnen, dass ein Typ wiestring
oderint
beim Aufruf der ToString-Methode.InformationsquelleAutor der Antwort Shekhar_Pro