Warum String.IsNullOrEmpty (str) und nicht str.IsNullOrEmpty ()?

stimmen
6

Mögliche Duplizieren:
string.IsNullOrEmpty () vs string.NotNullOrEmpty ()

Kann mir jemand erklären , warum in .NET würde ich schreiben String.IsNullOrEmpty(str)statt str.IsNullOrEmpty()? Es muss ein logischer Grund sein , aber ich weiß es nicht.

Es klingt wie Sie Jungs sagen

  1. Sie können diese Methoden nicht von Objekten aufrufen, die in C # / null sind. NET (ich es in C ++ zu tun, es tut Zugang irgendein Mitglied VARs)
  2. Erweiterungsmethoden gab es nicht in .NET 2.0
  3. Microsoft nicht die Mühe, die Standards zu aktualisieren und wohl gefühlt, es war unbedeutend
Veröffentlicht am 30/12/2009 um 00:50
quelle vom benutzer
In anderen Sprachen...                            


6 antworten

stimmen
9

Wenn str null ist, wird es keine zugänglichen Methoden haben, denn es gibt keine Instanz eines Objekts ist. Sie würden eine null-Verweisausnahme erhalten für den Versuch, eine Methode auf ein Null-Objekt zu nennen.

String.IsNullOrEmpty ist statisch, so wird es immer verfügbar sein String-Objekte zu testen.

Ich denke , man könnte argumentieren , dass es nützlich sein könnte str.IsEmpty haben (wie Jonathan sagte, könnten Sie eine machen extenion Methode für das String - Objekt zu handhaben ), aber es ist wirklich so einfach String.IsNullOrEmpty (str) anrufen und beide Situationen abdeckt. Auch wenn sie nicht gleich sind, gleichsetzen sie die meisten Menschen so zu sein (in Bezug auf die Geschäftslogik und überprüfen ein Wert für eine Zeichenfolge existiert ich meine) , wenn Werte von Strings Handhabung.

Beantwortet am 30/12/2009 um 00:52
quelle vom benutzer

stimmen
4

IsNullOrEmptyist eine statische Methode auf der stringKlasse; es ist nicht eine Instanzmethode. Dies liegt daran , wenn strist nulles nicht sinnvoll , eine Instanz Methode aufzurufen , wie Sie eine bekommen würde NullReferenceException. Somit IsNullOrEmptymuss eine statische Methode.

Beantwortet am 30/12/2009 um 00:53
quelle vom benutzer

stimmen
25

Wenn IsNullOrEmpty eine Instanz Methode waren, es auf eine Null-Instanz aufrufen würde eine Nullreferenceexception werfen, nicht false zurück, wie Sie wollen würde.

Es könnte eine Erweiterung Methode sein, aber dann würde es möglicherweise verwirrend sein - es ist wie eine Instanz Methode aussehen würde, würde aber nicht wie man handeln.

Beantwortet am 30/12/2009 um 00:53
quelle vom benutzer

stimmen
5

String.IsNullOrEmpty ist eine Klasse, Methode.

Wenn str ist Nothing(Null) , dann können Sie nicht eine Methode nennen. Sie können nur eine Instanz Methode für ein Objekt aufrufen.

Beantwortet am 30/12/2009 um 00:53
quelle vom benutzer

stimmen
0

Es wäre in einigen Fällen schön, wenn ein Standardverhalten für statisch typisierten null Referenzen definieren könnte. Mit Erweiterungsmethoden kann man effektiv erreicht werden, dass in vielen Fällen. Es gibt einige Fallstricke, though. Zum Beispiel wird ein Objekt zu einem nicht verwandten Typ Gießen in .net Sprachen generell verboten, da es keine Fälle, in denen ein solches Verhalten legitim zur Laufzeit sein würde. Auf der anderen Seite, wenn ein Objekt null ist, konnte sie gegossen wird, um das Objekt und dann könnte das Objekt Null in einem anderen Typ umgewandelt werden. Wenn das Ergebnis einer solchen Besetzung als Standardinstanz des letzteren Typs angesehen werden könnte, wäre der Effekt der gegossene Halb legitim zu machen.

Beantwortet am 26/11/2010 um 23:06
quelle vom benutzer

stimmen
3

Ich habe jetzt eine Erweiterungsmethode für eine Weile mit. Funktioniert super.

 public static bool IsNullOrEmpty(this string val)
 {
     return string.IsNullOrEmpty(val);
 }

Es tut offensichtlich das Gleiche wie string.IsNullOrEmpty (string), aber es ist nur einfacher, etwas zu tun, wie

if(mystring.IsNullOrEmpty())
{
  //... do something
}
Beantwortet am 20/04/2011 um 20:22
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more