C# 尝试使用枚举填充列表,但得到';类型';像';变量';
我正在创建一副卡片,并将我的套装和值放在枚举中,但我的语法在尝试填充列表时出错。另外,Ace的值可以是1或11,是否有办法将其合并到我的枚举中,或者在执行诸如21点手数求和之类的操作时,我是否需要将其编码C# 尝试使用枚举填充列表,但得到';类型';像';变量';,c#,types,enums,C#,Types,Enums,我正在创建一副卡片,并将我的套装和值放在枚举中,但我的语法在尝试填充列表时出错。另外,Ace的值可以是1或11,是否有办法将其合并到我的枚举中,或者在执行诸如21点手数求和之类的操作时,我是否需要将其编码 public class Deck { private List<Card> cards; private Random random = new Random(); public Deck() { cards = new List&
public class Deck
{
private List<Card> cards;
private Random random = new Random();
public Deck()
{
cards = new List<Card>();
for (int s = 0; s < 4; s++)
//for (int v = 0; v < 14; v++)
foreach(Enum v in Values)
cards.Add(new Card((Suits)s, (Values)v));
}
您的问题是这一行:
foreach(Enum v in Values)
您不能以这种方式枚举enum
Values
是您的enum
类型声明的名称。。不是一组值
不过,您可以这样做:
foreach (var v in Enum.GetValues(typeof(Values)))
您需要使用获取枚举的所有值的数组
然后,您应该能够执行类似的操作(不确定这是否可以编译,但您应该知道):
不过,我认为您的值枚举无法正常工作。一旦您使用Ten
到King
之间的一个值初始化了某个对象,您将无法分辨它最初是什么
我认为您需要类似的东西(也可以将您的多元枚举名称重命名为单数,以匹配正常的命名约定):
您还可以使用Linq初始化卡
列表,如下所示:
List<Card> cards =
(
from suit in Enum.GetValues(typeof(Suit)).OfType<Suit>()
from rank in Enum.GetValues(typeof(Rank)).OfType<Rank>()
select new Card(suit, rank)
).ToList();
然后,无论您在哪里拥有Rank
,都可以使用Rank.Value()
,例如,卡的ToString()
将变成:
public override string ToString()
{
return _rank + " of " + _suit + " with value " + _rank.Value();
}
这是可行的,但现在当我打印卡片名称时,我得到了所有人脸卡的“十”字。这是我的相关卡片类信息:公共类卡片{public casts suit{get;set;}公共值值{get;set;}公共卡(suts{u suit,Values{u value){this.suit=\u suit;this.value=\u value;}公共字符串名称{get{return value.ToString()+”of“+suit.ToString();}}}public override string ToString(){return Name;}value.ToString()适用于Ace、Two等,但所有的人脸卡都显示为“十”这是因为它们都有相同的值。
Ten
、Jack
、Queen
和King
在较低的级别上都是相同的。它们都等于10。您无法区分它们。可能是
public enum Suit
{
Spades,
Clubs,
Diamonds,
Hearts
}
public enum Rank
{
Ace = 1,
Two = 2,
Three = 3,
Four = 4,
Five = 5,
Six = 6,
Seven = 7,
Eight = 8,
Nine = 9,
Ten = 10,
Jack = 11,
Queen = 12,
King = 13
}
class Card
{
readonly Suit _suit;
readonly Rank _rank;
public Card(Suit suit, Rank rank)
{
_suit = suit;
_rank = rank;
}
public Rank Rank
{
get
{
return _rank;
}
}
public Suit Suit
{
get
{
return _suit;
}
}
public int Value
{
get
{
if (Rank >= Rank.Ten)
{
return 10;
}
else
{
return (int) Rank;
}
}
}
public override string ToString()
{
return _rank + " of " + _suit + " with value " + Value;
}
}
List<Card> cards =
(
from suit in Enum.GetValues(typeof(Suit)).OfType<Suit>()
from rank in Enum.GetValues(typeof(Rank)).OfType<Rank>()
select new Card(suit, rank)
).ToList();
static class RankExt
{
public static int Value(this Rank rank)
{
if (rank >= Rank.Ten)
{
return 10;
}
else
{
return (int)rank;
}
}
}
public override string ToString()
{
return _rank + " of " + _suit + " with value " + _rank.Value();
}