Velena Skrevet 28. juli 2008 Del Skrevet 28. juli 2008 (endret) Hallo igjen. Jeg holder på med et program som benytter seg av internetttilgang, og har i den annledning lånt en funksjon som skal teste tilkoblingen (Koden jeg hentet den fra kan sees her:http://www.c-sharpcorner.com/UploadFile/sc...ctionState.aspx). I koden er følgende if statement : long lngFlags; if (System.Convert.ToBoolean(lngFlags) && System.Convert.ToBoolean(InetConnState.lan)) { switch (ConnectionQualityString) { case "Good": ConnectionQualityString = "Good"; break; case "Intermittent": ConnectionQualityString = "Good"; break; case "Off": ConnectionQualityString = "Intermittent"; break; } this.Refresh(); } else if (System.Convert.ToInt64(System.Convert.ToBoolean(lngFlags )) & (long) InetConnState.modem)// &en i denne else if statementet er det jeg lurer på { switch (ConnectionQualityString) { case "Good": ConnectionQualityString = "Good"; break; case "Intermittent": ConnectionQualityString = "Good"; break; case "Off": ConnectionQualityString = "Intermittent"; break; } } ......flere else if ........ Det jeg da lurer på er hva "&" gjør i else if statementet? Har sett det brukt noen ganger før men har ikke helt funnet ut hva det gjør. Og en annen ting, koden min vil ikke kompilere når jeg bruker koden, men gir en feilmelding på akkurat denne linjen(Cannot implicitly convert from type 'long' to 'bool'), regner med at dette er pga Sytem.Convert.ToBoolean(lngFlags) men ser ikke helt hvorfor dette ikke går. Jeg har prøvd å bruke bool.Parse(lngFlags.ToString()) som gir samme resultat. Endret 28. juli 2008 av Velena Lenke til kommentar
Manfred Skrevet 28. juli 2008 Del Skrevet 28. juli 2008 Du vet... MSDN er ikke nedlagt... Lenke til kommentar
Velena Skrevet 28. juli 2008 Forfatter Del Skrevet 28. juli 2008 (endret) Er fortsatt ustødig på noen av termene i C#, og visste ikke at & blir kalt en operator. Jeg visste derimot at det er håpløst å søke etter bare "&" og regne med å få relevante resultat, derfor spurte jeg her. Edit: Forresten, hva er nytten til & hvis && er mer effektiv, og resultatet blir det samme? Endret 28. juli 2008 av Velena Lenke til kommentar
Wubbable Skrevet 28. juli 2008 Del Skrevet 28. juli 2008 (endret) http://www.blackwasp.co.uk/CSharpBooleanOperators.aspx Google er heller ikke nedlagt && = AndAlso || = OrElse Kanskje du bør lære deg VB først ^^ Det de gjør er at hvis den første delen i && er false, evalueres ikke den andre... (Raskere kode) Samme med ||... Endret 28. juli 2008 av Wubbable Lenke til kommentar
Velena Skrevet 28. juli 2008 Forfatter Del Skrevet 28. juli 2008 (endret) Takk for linken, den besvarte spørsmålet. Edit: It is important to understand that there can be drawbacks to not evaluating the second operand. If, for example, an increment operator (++) is used in the second operand, not evaluating this would mean that a variable's value would not be adjusted. Inappropriate use such as this can lead to bugs that are difficult to identify and resolve.Ville det ikke være like greit å utføre addisjonen før &&, istedet for å bruke &? Endret 28. juli 2008 av Velena Lenke til kommentar
GeirGrusom Skrevet 28. juli 2008 Del Skrevet 28. juli 2008 Er det bare jeg som fikk ekle grøsninger av denne koden? Lenke til kommentar
Velena Skrevet 28. juli 2008 Forfatter Del Skrevet 28. juli 2008 Er det bare jeg som fikk ekle grøsninger av denne koden? Det kan ha noe med at koderen visstnok har brukt et oversettelsesprogram til å konvertere koden fra VB til C#. Lenke til kommentar
Glenn F. Henriksen Skrevet 6. august 2008 Del Skrevet 6. august 2008 Den lenken bommer litt på poenget. & er en såkalt bitwise operator og kan brukes på mer enn bare bool typer, den kan også brukes på heltall. Dvs at hvis du har int i = 6; // 0110 i binært int j = 11; // 1011 i binært int k = i & j; // k = 2, dvs 0010 i binært Så tar den 0110 (6) og OG-er (&) hver bit med tilsvarende bit i 1011 (11) og får 0010 (2) til svar fordi det var bare i den nest siste posisjonen det var en 1 i begge tallene (med OG må du ha 1 i begge for å få 1). Bitwise operatorer brukes til en del binær regning samt til såkalte flagg. Stort sett en levning fra C++ tiden og er fullstendig ubrukelig, og som regel uforståelig, hvis du ikke forstår binære tall først. && derimot er en operator som er spesialbygget for å ta seg av kun bool verdier*, dvs som er enten true eller false. Det er også det som gjør at den kan kortslutte et uttrykk. * I C# i hvert fall, i C# sin bestefar, C++, kunne && også brukes med andre typer og fant først ut om utrykket på den ene siden var 0 (dvs false) eller noe annet enn 0 (dvs true), så den andre siden og så beregnet resultatet. 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å