siDDis Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Til strenger så pleier eg å bruke equals, men eg ser at det går ann å bruke dette til fleire datatyper. Sidan == brukes til å samanlikne objekter så er det kanskje best å helst bruke Equals til alle samanlikninger av datatyper? Lenke til kommentar
kaffenils Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 http://blogs.msdn.com/csharpfaq/archive/20.../29/102224.aspx Lenke til kommentar
steingrim Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Int og de andre basistypene, inkludert string, overlaster operator ==. Dermed kan du trygt bruke == til å sammenligne stringer og inter i c#. Dette er ulikt Java der == på basistyper tester verdi-likhet, mens == på objekter tester referanse-likhet. Dermed må man bruke String.equals() i Java. Lenke til kommentar
Manfred Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 av gammel vane bruker jeg == på primitivene (int, char, osv...) men Equals() på stringer. Lenke til kommentar
GeirGrusom Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Jeg tror ikke jeg noensinne har brukt Equals, tar jeg ikke helt feil mapper denne direkte til == (eller omvendt) En er jo sjeldent(aldri?) interessert i å sammenligne referanser til en string Men hvis du vil eksplisitt sjekke referanser, bruker du object.ReferenceEquals funksjonen. Lenke til kommentar
steingrim Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Som jeg sa over; string overlaster operator == til å oppføre seg som string.Equals(). Geir: du har aldri brukt Equals på stringer, men jeg regner med du har brukt den på andre typer? Lenke til kommentar
GeirGrusom Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Geir: du har aldri brukt Equals på stringer, men jeg regner med du har brukt den på andre typer? Nei, ikke det jeg kan huske ihvertfall. Må bare tenke meg litt om... Det har egentlig aldri vært aktuelt, jeg sammenligner heller aldri stringer for den saks skyld, hverken med == eller .Equals For meg har det oftere vært fornuftig å sammenligne objekter etter referanse, og ikke etter verdi, stringer lager jeg ofte hash verdier av istedet for å sammenligne innholdet. Lenke til kommentar
HDSoftware Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Geir: du har aldri brukt Equals på stringer, men jeg regner med du har brukt den på andre typer? Nei, ikke det jeg kan huske ihvertfall. Må bare tenke meg litt om... Det har egentlig aldri vært aktuelt, jeg sammenligner heller aldri stringer for den saks skyld, hverken med == eller .Equals For meg har det oftere vært fornuftig å sammenligne objekter etter referanse, og ikke etter verdi, stringer lager jeg ofte hash verdier av istedet for å sammenligne innholdet. Hvorfor lager du HASH verdier av strenger? Mulig jeg er gammeldags her men if(SomeString == "Heisan") eller switch(SomeString) { case "Hei": break; case "på": break; case "Deg": break; } er da helt vanlige måter å sjekke strenger på? eller? Eller hva med if(SomeString.SubString(0,3) == "NOE") Eller har jeg missforstått emnet? Lenke til kommentar
j000rn Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Eller hva med if(SomeString.SubString(0,3) == "NOE") Eller har jeg missforstått emnet? SomeString.StartsWith("NOE") Lenke til kommentar
HDSoftware Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Eller hva med if(SomeString.SubString(0,3) == "NOE") Eller har jeg missforstått emnet? SomeString.StartsWith("NOE") jada - hehe Sikkert en dullion med slike kommandoer og funksjoner i .NET ;-) Lenke til kommentar
j000rn Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Btw; String'er sammenlignes helst med String.Compare Lenke til kommentar
steingrim Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 For noe tøv. Skal man kun sjekke string-likhet bruker man ikke String.Compare. Skal man sjekke leksikografisk rekkefølge derimot. Lenke til kommentar
Gråskjegg Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 For noe tøv. Skal man kun sjekke string-likhet bruker man ikke String.Compare. Skal man sjekke leksikografisk rekkefølge derimot. NATURLIGVIS bruker man string.Compare. Da kan man på ryddig vis sammenligne med eller uten store bokstaver (i tillegg til leksikografisk - som jeg veldig sjelden bryr meg om) string.Compare(noe, "noe", true) == 0 for "NOE" "noe" og alle varianter i mellom. Mye ryddigere enn noe.ToLower()=="NOE" - som sikkert lager midlertidige objekter, i tillegg til å være opplagt feil. - grå - Lenke til kommentar
steingrim Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 Jeg bryr meg alltid om forskjellen på store og små bokstaver Lenke til kommentar
GeirGrusom Skrevet 14. mai 2008 Rapporter Del Skrevet 14. mai 2008 public class Texture { protected int m_hash; public override int GetHashCode() { return m_hash; } public Texture(Bitmap src) { LoadBitmap(src); m_hash = -1; } public Texture(string filename) { LoadBitmap(Bitmap.FromFile(filename)); m_hash = TextureCollection.CreateHashFromFilename(filename); } } public class TextureCollection { public static int CreateHashFromFilename(string text) { MD5 md5 = MD5.Create(); return BitConverter.ToInt32(md5.CreateHash(Encoding.Unicode.GetBytes(filename.ToLower()))); } protected List<Texture> m_textures public Texture LoadTexture(string filename) { int hash = CreateHashFromFilename(filename); Texture res = m_textures.Find(delegate (Texture tex) { return tex.GetHashCode() == hash; }); if(res == null) { res = new Texture(filename); m_textures.Add(res); } return res; } } Ved siden av være mer effektiv i lengden, kan også hash verdier gjøre slik at en kan f.eks. lagre en hash verdi i en fil, uten å referere til en spesiell fil i dette tilfellet. Jeg synes ihvertfall det ofte er en god idé. Lenke til kommentar
ze5400 Skrevet 17. mai 2008 Rapporter Del Skrevet 17. mai 2008 Det var da svært til kranglig Bruker Rema 1000 metoden jeg (==) Lenke til kommentar
CronoMan Skrevet 21. mai 2008 Rapporter Del Skrevet 21. mai 2008 For noe tøv. Skal man kun sjekke string-likhet bruker man ikke String.Compare. Skal man sjekke leksikografisk rekkefølge derimot. NATURLIGVIS bruker man string.Compare. Da kan man på ryddig vis sammenligne med eller uten store bokstaver (i tillegg til leksikografisk - som jeg veldig sjelden bryr meg om) string.Compare(noe, "noe", true) == 0 for "NOE" "noe" og alle varianter i mellom. Mye ryddigere enn noe.ToLower()=="NOE" - som sikkert lager midlertidige objekter, i tillegg til å være opplagt feil. - grå - if(tehstring.Equals("noe", StringComparison.CurrentCultureIgnoreCase)) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå