C# 如何将int转换为enum值?
这是我的代码,它抛出了一个错误,说C# 如何将int转换为enum值?,c#,class,C#,Class,这是我的代码,它抛出了一个错误,说无法将类型“int”转换为卡片。适合和 无法将类型“int”转换为卡片。等级 private Card[] cards; public Deck() { cards = new Card[52]; for (int suitVal = 0; suitVal < 4; suitVal++) { for (int rankVal = 0; rankVal < 14; rankVal++) {
无法将类型“int”转换为卡片。适合和
无法将类型“int”转换为卡片。等级
private Card[] cards;
public Deck()
{
cards = new Card[52];
for (int suitVal = 0; suitVal < 4; suitVal++)
{
for (int rankVal = 0; rankVal < 14; rankVal++)
{
cards[suitVal * 13 + rankVal - 1] = new Card((Suits)suitVal, (Rank)rankVal);
}
}
}
现在西服枚举和等级枚举是从ACE=1开始的常规牌组,以此类推,西服是钻石、梅花、红桃和黑桃。
谁能告诉我为什么我会犯上述错误。以下代码取自一本书。
谢谢
*编辑
像这样换行
cards[suitVal * 13 + rankVal] = new Card(((Suit)suitVal), ((ranks)rankVal));
public readonly Suit suit;
public readonly ranks rank;
public Card(Suit newSuit, ranks newRank)
{
suit = newSuit;
rank = newRank;
}
由于您的类在构造函数中使用枚举,所以如下所示进行更改
cards[suitVal * 13 + rankVal] = new Card(((Suit)suitVal), ((ranks)rankVal));
public readonly Suit suit;
public readonly ranks rank;
public Card(Suit newSuit, ranks newRank)
{
suit = newSuit;
rank = newRank;
}
根据您的枚举声明,Suit在[0..3]范围内,而秩在[1..13]范围内(请注意,该秩不是基于零的),因此应该更正内部for循环:
for (int rankVal = 0; rankVal < 13; rankVal++) // <- 14 changed for 13: [0..13] has the same length as [1..14]
{
cards[suitVal * 13 + rankVal] = new Card((Suits)suitVal, (Rank)(rankVal + 1)); // <- removed -1 from index; add 1 to rankVal, we need [1..14], not [0..13]
...
for(int-rankVal=0;rankVal<13;rankVal++)/我将看到它将得到其他错误“索引超出了数组的边界”
当suitVal=0和rankVal=0时,卡[suitVal*13+rankVal-1]=-1,这在数组索引之外。这运行良好
但要纠正这一点
for (int suitVal = 0; suitVal < 4; suitVal++)
{
for (int rankVal = 0; rankVal < 14; rankVal++)
{
cards[suitVal * 13 + rankVal - 1] = new Card((Suit)suitVal, (Rank)rankVal);
}
}
[suitVal*13+rankVal-1]=[0*13+0-1]=[-1]!哎呀
并且在您的prgm中:
public readonly Suit suit; //not Suits
public readonly ranks rank; //not Rank
您能否显示suites
和Rank
的定义?使用该方法时不会重复,并且仍然返回您正在使用的错误(suites)suiteval
,但您发布的枚举实际上名为suite
。您的代码定义了枚举ranks
和suite
,但尝试将类型转换为等级
和适合
。确保所有类型名称都匹配。不适用错误1找不到类型或命名空间名称“Suit”(是否缺少using指令或程序集引用?)Intellisense仍在指示我使用公共只读Suit;正如你回答的那样。我应该提到这是一个类库。我已经更新了一套又一套;您将枚举作为合适的参数传递(在上面给出的代码中)。不是西服。当我不得不这样做时,这不起作用。是西服。西服和军衔。rank@user2434321请张贴您的全部代码。什么是西装?这是一节课吗?什么是等级?我们无法继续猜测-1,因为当suitval和ranval都为0时,上述代码将抛出错误。这将把这张卡片[suitVal*13+rankVal-1]评估为卡片[-1]。因此索引超出范围。@Ehsan Ullah:谢谢,我已经更正了卡片内的索引[…]
public readonly Suit suit; //not Suits
public readonly ranks rank; //not Rank