C# 数组中的项,将枚举和强制转换为int相加

C# 数组中的项,将枚举和强制转换为int相加,c#,casting,enums,boolean,C#,Casting,Enums,Boolean,另一个经典的纸牌/扑克游戏问题;我用随机卡片(用户、计算机)填充双手。现在,我们只是比较这两个指针,将指针的enum/rank值相加并进行比较。我正确地显示了它,并且我认为我的逻辑是正确的,但我只是不太理解强制转换,尤其是当涉及枚举时。在枚举中建立秩(平分=2等)。超级卡片父类已将等级的get set属性设置为CardsBank 这是超级卡片类: public abstract class SuperCard { #region Properties public Rank c

另一个经典的纸牌/扑克游戏问题;我用随机卡片(用户、计算机)填充双手。现在,我们只是比较这两个指针,将指针的enum/rank值相加并进行比较。我正确地显示了它,并且我认为我的逻辑是正确的,但我只是不太理解强制转换,尤其是当涉及枚举时。在枚举中建立秩(平分=2等)。超级卡片父类已将等级的get set属性设置为CardsBank

这是超级卡片类:

public abstract class SuperCard
{
    #region Properties

    public Rank cardsRank { get; set; }
    public abstract Suit cardSuit { get; }

    #endregion

    public abstract void Draw();
}
以下是主要节目:

CardLibrary.CardSet myDeck = new CardLibrary.CardSet(); // create deck of 52 cards
int howManyCards = 5;
int balance = 10;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.BackgroundColor = ConsoleColor.DarkBlue;

Console.WriteLine("Welcome to NewPoker! \nYou get $10 to start. Each bet is $1"); // intro and rules

while (balance != 0)
{
    SuperCard[] computerHand = myDeck.GetCards(howManyCards); // create two hands, user/comp
    SuperCard[] myHand = myDeck.GetCards(howManyCards);
    DrawHands(computerHand, myHand); // call hands
    Console.ReadLine();
    bool won = CompareHands(computerHand, myHand);
    if (won)
    {
        Console.WriteLine("You win this hand! Your balance is {0}", balance.ToString("C"));
        balance++;
        Console.WriteLine("Press enter to play the next hand");
        Console.ReadLine();
    }
    if (!won)
    {
        Console.WriteLine("The dealer wins this hand! Your balance is {0}", balance.ToString("C"));
        balance--;
        if (balance > 0)
        {
            Console.WriteLine("Press enter to play the next hand");
            Console.ReadLine();
        }
    }
}
下面是CompareHands方法:

public bool CompareHands(SuperCard[] compHand, SuperCard[] userHand)
{
    int compTotal = 0, userTotal = 0;
    foreach (var item in compHand)
    {
        //cast enum rank to int, add?
    }
    foreach (var item in userHand)
    {
        //cast enum rank to int, add?
    }
    if (userTotal > compTotal)
    {
        return true;
    }
    else
        return false;
}

在我看来,我认为需要一个
foreach
循环来循环每一个,将
item.cardsRank
(在
Rank
enum的超类中获取set属性)转换为一个int(我不确定如何),然后将该值添加到运行总数(
userTotal
compTotal
),然后比较它们的返回值,因为我们在程序中调用bool“won”。非常感谢任何提示或指导

获得int值所需做的就是强制转换

void Main()
{
var rank = Rank.Two;
Console.Write((int)rank);
}

public enum Rank
{
None,
One = 1,
Two = 2
}

例如,这将打印2。枚举将初始化为零,因此我将在那里保留一个“none”值。

您要查找的是所谓的“枚举基础类型”。基本上,您可以指定可以表示枚举值的值

可以使用任何积分常数。对于所有C#integral类型,请导航到。默认值为
int
,因此

public enum Rank 
{
    Value1,
    Value2
}
编译器将其视为

public enum Rank : int
{
    Value1 = 0,
    Value2 = 1
}
默认情况下,第一个项目从0开始,并按顺序递增1。但你不必遵守它。您不必将任何值设置为0。当需要从代码中获取基础值时,只需调用

int rank = (int)Rank.Value1;
并将
(int)
替换为您正在使用的类型。你也可以倒着做

Rank rank = (Rank)1;
但请记住

可以将任意整数值指定给秩。例如,这行代码不会产生错误:rank=(rank)42。但是,您不应该这样做,因为隐含的期望是枚举变量将只包含枚举定义的一个值。为枚举类型的变量指定任意值会带来很高的错误风险。来自MSDN


虽然我做的并不完全一样,但这帮助我理解了我想怎么做,并找到了答案。非常感谢。