13

Da String IEnumerable<char> implementiert, erwarte ich die Enumerable Erweiterungsmethoden in Intellisense, um zu sehen, zum Beispiel bei der Eingabe der Zeit inWarum funktioniert VS 2008 Anzeige Erweiterungsmethoden in IntelliSense für String-Klasse

String s = "asdf"; 
s. 

I Ich erwartete zu sehen, .Select<char>(...), .ToList<char>(), etc. Ich war dann überrascht zu sehen, dass die Erweiterungsmethoden tun in der Tat arbeiten auf der String-Klasse, sie zeigen nur nicht in Intellisense. Weiß jemand, warum das so ist? Dies kann auf this Frage bezogen werden.

Antwort

15

Es ist durch explizites Design. Das Problem ist, dass, während String auf jeden Fall IEnumerable<T> implementiert, die meisten Leute nicht daran denken, oder wichtiger, es auf diese Weise zu benutzen.

String hat eine ziemlich kleine Anzahl von Methoden. Anfangs haben wir die Erweiterungsmethoden von String nicht gefiltert und das Ergebnis war eine Menge negatives Feedback. Es hat die Anzahl der Methoden mit den richtigen Importen zeitweise fast verdreifacht. Bei allen angezeigten Erweiterungsmethoden konnten die Benutzer die gesuchte String-Methode im Rauschen häufig nicht sehen.

String ist ein ... einfache Art und es ist besser, es so zu sehen :)

Es ist immer noch vollständig möglich, eine Erweiterungsmethode auf Zeichenfolge aufzurufen. Es wird wahrscheinlich nicht in Intellisense angezeigt.

EDIT: String hat eigentlich einige Methoden. Aber weil viele von ihnen Überladungen sind, kollabieren sie in Intellisense.

+0

Ist dies in VS fest codiert oder gibt es ein Attribut, das in der String- oder Enumerable-Klasse verwendet wird, um denselben Effekt zu erzielen? – foson

+0

Ich glaube nicht, dass es ein Attribut oder eine Konfiguration gibt, die optimiert werden können, um dieses Verhalten zu stoppen oder zu erhalten. – JaredPar

+0

Dies sollte wirklich konfigurierbar sein. Wenn Sie Erweiterungsmethoden haben, dann denke ich, dass Sie wirklich nur mit dem Unsinn leben müssen. Das scheint nur ein sehr nicht offensichtliches und unerwartetes Verhalten zu sein. – BobbyShaftoe

-2

Es sollte.

For example you can write it public static string myExtensionMethod(this String yuppi){ 
} 

Dann soll es da sein.

+0

was? es funktioniert nicht ! – Tarik

2

Für Info hat sich das in VS2010 (in Beta 2, mindestens) geändert. Es sieht so aus, als ob diese Filterung entfernt wurde (vermutlich hat es zu viel Verwirrung verursacht), und die Methoden sind jetzt sichtbar, zusammen mit dem Erweiterungs-Methodenzeichen.

+0

Ein intelligenter Intellisense. Ausgezeichnet. – foson

Verwandte Themen