Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将int转换为enum值?_C#_Class - Fatal编程技术网

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