Hvorfor String.IsNullOrEmpty (str) og ikke str.IsNullOrEmpty ()?

stemmer
6

Kan noen forklare meg hvorfor i .NET ville jeg skrive String.IsNullOrEmpty(str)i stedet for str.IsNullOrEmpty()? Det må være en logisk grunn, men jeg vet ikke det.

Det høres ut som dere sier

  1. Du kan ikke kalle metoder fra objekter som er null i C # /. NET (jeg gjør det i C ++, det bare ikke tilgang ethvert medlem vars)
  2. Skjøte metoder ikke eksisterte i .NET 2.0
  3. Microsoft gadd ikke å oppdatere standarder og trolig følte det var ubetydelige
Publisert på 29/12/2009 klokken 23:50
kilden bruker
På andre språk...                            


6 svar

stemmer
9

Hvis str er null, vil det ikke ha noen vanskelig tilgjengelige metoder, fordi det ikke er et eksempel på et objekt. Du vil få en nullreferanse unntak for å prøve å kalle en metode på en null objekt.

String.IsNullOrEmpty er statisk, så det vil alltid være tilgjengelig for å teste streng stedene.

Jeg antar du kan argumentere for at det kan være nyttig å ha str.IsEmpty (som Jonathan sa, kan du gjøre en extenion metode for streng objekt å håndtere dette), men egentlig er det like enkelt å ringe String.IsNullOrEmpty (str) og dekker begge situasjoner. Selv om de ikke er det samme, de fleste likestille dem for å være så (i form av forretningslogikk og verifisere en verdi finnes for en streng jeg mener) når du håndterer verdier av strenger.

Svarte 29/12/2009 kl. 23:52
kilden bruker

stemmer
4

IsNullOrEmptyer en statisk metode på stringklassen; det er ikke et eksempel metode. Dette er fordi hvis strer nullikke det ikke fornuftig å påkalle en instansmetode som du ville få en NullReferenceException. Således IsNullOrEmptymå være en statisk metode.

Svarte 29/12/2009 kl. 23:53
kilden bruker

stemmer
25

Hvis IsNullOrEmpty var en instansmetode, og kaller det en null eksempel ville kaste en NullReferenceException, ikke return false som du ønsker.

Det kan være en forlengelse metode, men da ville det potensielt være forvirrende - det ville se ut som en instansmetode, men vil ikke opptre som en.

Svarte 29/12/2009 kl. 23:53
kilden bruker

stemmer
5

String.IsNullOrEmpty er en klasse metode.

Hvis str var Nothing(Null) så du ikke kan kalle en metode på den. Du kan bare kalle en instansmetode på et objekt.

Svarte 29/12/2009 kl. 23:53
kilden bruker

stemmer
0

Det ville i noen tilfeller være fint om man kunne definere standard atferd for statisk-skrev null referanser. Bruke skjøtemetoder, kan man effektivt å oppnå at i mange tilfeller. Det er noen gotchas, though. For eksempel kaster en gjenstand til en urelatert type som er forbudt i .net språk, siden det ikke er noen tilfeller der en slik oppførsel ville være lovlig under kjøring. På den annen side, hvis et objekt var null, det kan bli kastet til å protestere og deretter objektet null kan bli kastet til en annen type. Hvis resultatet av et slikt støpt kunne betraktes som standard eksempel på sistnevnte type, vil effekten være å gjøre den støpte semi-legitime.

Svarte 26/11/2010 kl. 22:06
kilden bruker

stemmer
3

Jeg har brukt en utvidelse metode for en stund nå. Fungerer bra.

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

Det åpenbart gjør det samme som string.IsNullOrEmpty (streng), men det er bare lettere å gjøre noe sånt

if(mystring.IsNullOrEmpty())
{
  //... do something
}
Svarte 20/04/2011 kl. 19:22
kilden bruker

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