24. august 2014 - 14:29 Der er 3 kommentarer og
1 løsning

Brug af enum

Jeg er meget ny i programmering, men skal prøve at forklare det her på bedste måde. Jeg er ved at lave et kortspil og har lavet en enum der hedder Suit og indeholder de 4 "farver":
public enum Suit
    {
        Hearts, Clubs, Diamonds, Spades
    }

jeg skal nu lave et nyt kort ud fra klassen Card jeg selv har lavet. Constructeren skal bruge en værdi og en suit. Jeg har et string array "propertys" som fx ser sådan her ud: propertys[0]:12, propertys[1]:Hearts.
Jeg har overført de værdier til to variabler:
v= 12 (int)
col= Hearts (string)

Jeg skriver så:

Card c = new Card(v, col);

Det virker dog ikke... hvad skal jeg gøre for at få lavet den string "Hearts" om til noget jeg kan bruge som Suit?

Håber i forstår hvad jeg mener.

På forhånd tak for hjælpen.
Avatar billede arne_v Ekspert
24. august 2014 - 14:33 #1
Du skal nok have 2 properties af henholdsvis type int og Suit!
24. august 2014 - 14:59 #2
Jeg fandt en anden løsning. Jeg konverterede den enum til en intiger og så kaldte jeg den position igen. Min kode blev sådan her:

b.Tag = c.Value.ToString() + "," + Convert.ToInt64(c.Color).ToString();

og så der hvor jeg bruger det:

string btnCard = b.Tag.ToString();
string[] propertys = btnCard.Split(',');
int v = Convert.ToInt32(propertys[0]);
int col = Convert.ToInt32(propertys[1]);
Card c = new Card(v, (Suit)col);
Avatar billede arne_v Ekspert
25. august 2014 - 01:57 #3
Til inspiration:

using System;
using System.Collections.Generic;
using System.Linq;

namespace E
{
    public static class Util
    {
        public static T EnumParse<T>(string s) where T : struct
        {
            return (T)Enum.Parse(typeof(T), s);
        }
    }
    public enum Suit
    {
        Hearts, Clubs, Diamonds, Spades
    }
    public class Card
    {
        public Suit Suit { get; set; }
        public int Value { get; set; }
        public override string ToString()
        {
            return Value + " of " + Suit;
        }
    }
    public class CardList
    {
        private List<Card> list = new List<Card>();
        public void Add(Card card)
        {
            list.Add(card);
        }
        public override string ToString()
        {
            return "(" + String.Join(",", list.ConvertAll(elm => elm.ToString()).ToArray()) +")";
        }

    }
    public class Program
    {
        public static void Main(string[] args)
        {
            CardList list = new CardList();
            Console.WriteLine(list);
            list.Add(new Card { Suit = Suit.Clubs, Value = 8 });
            Console.WriteLine(list);
            list.Add(new Card { Suit = Util.EnumParse<Suit>("Spades"), Value = int.Parse("9") });
            Console.WriteLine(list);
            Console.ReadKey();
        }
    }
}
25. august 2014 - 02:01 #4
Jamen jeg siger da mange tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester