Gå til innhold

C#: Hvordan hitteste riktig med 8 retninger?


Anbefalte innlegg

Hehe Det går fint det som sagt, det er bare å prøve. FlagsAttribute er bare for enkelhetens skyld.

I et 8-bit tall så er alle bitene sånn:

0x01(1), 0x02(2),0x04(4), 0x08(8), 0x10(16), 0x20(32), 0x40(64) og 0x80(128)

Og som kjent kan flere bit være satt av gangen, for eksempel

0x1 og 0x2

0x1(0001) | 0x2(0010) = 0x3(0011)

0x3(0011) & 0x1(0001) = 0x1(0001)

0x3(0011) & 0x4(0100) = 0x0(0000)

 

Om det er brukt Flags attributtet på enumen eller ikke endrer ikke disse reglene.

Som sagt så er det eneste Flags gjør, å automatisk nummerere feltene etter denne metoden dersom ingenting annen blir sagt, men uten Flags så teller den bare oppover istedet.

 

Så jeg kunne skrevet

[Flags]
public enum Direction
{
 North,
 South,
 East,
 West
}

som ville gitt akkurat samme resultatet.

Lenke til kommentar
  • 3 uker senere...
Videoannonse
Annonse

Hm, nå har jeg prøvd... og det ser da virkelig ikke ut til at det du sier stemmer...

 

Har følgende program:

class Program
{
	static void Main(string[] args)
	{
		foreach(Color c in Enum.GetValues(typeof(Color)))
		{
			Console.WriteLine("{0,3} {1}", (int) c, c);
		}
	}
}

 

Hvis jeg nå setter denne Color enumen til det følgende så får jeg det som jeg forventer:

[Flags]
enum Color
{
	Black = 0,
	Red = 1,
	Green = 2,
	Blue = 4,
	Cyan = Green | Blue,
	Magenta = Red | Blue,
	Yellow = Red | Green,
	White = Red | Green | Blue
}

0 Black

1 Red

2 Green

3 Yellow

4 Blue

5 Magenta

6 Cyan

7 White

 

Forsøkte så å fjerne tallene, som du sier kan gjøres, men da fikk jeg følgende:

[Flags]
enum Color
{
	Black,
	Red,
	Green,
	Blue,
	Cyan = Green | Blue,
	Magenta = Red | Blue,
	Yellow = Red | Green,
	White = Red | Green | Blue
}

0 Black

1 Red

2 Green

3 White

3 White

3 White

3 White

3 White

Tenkte det kanskje var på grunn av de siste kombinasjonsgreiene, så prøvde å fjerne de:

	[Flags]
enum Color
{
	Black,
	Red,
	Green,
	Blue
}

0 Black

1 Red

2 Green

3 Blue

 

men det ga jo heller ikke det ønskede resultatet... kunne du forklare? noe jeg har gjort feil eller glemt eller sånn? eller har jeg bare misforstått noe?

Lenke til kommentar

Når jeg nå leser dokumentasjonen, ser det ut til at du har rett, den sier ingenting om det, så du må fortsatt definere verdiene selv. Det den derimot gjør, er at ToString funksjonen kan klare å finne ut om det er en blanding av flere verdier, så alt i alt er egentlig FlagsAttribute temmelig ubrukelig utenfor reflection.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...