一个foreach中的两个变量

时间:2014-04-01 16:56:31

标签: c# foreach enums console playing-cards

我正在尝试在控制台标准卡片上打印。到目前为止,这是我的代码,我被卡住了。

我的问题 - 是否有任何方法可以在cardnumber foreach声明中使用Suit枚举,基本上可以打印卡号/套装,卡号/套装等。我知道有更好的方法可以做到这一点,但我很好奇是否有可能完成。还有任何想法如何在一行上只打印2个,之后只有3秒在行等等?

此致

using System;
using System.Linq;

class Print_a_Deck_of_52_Card   
{

public enum Suit
{
    Club = '\u2663',
    Diamond = '\u2666',
    Heart = '\u2665',
    Spades = '\u2660',
}

public enum CardNumber
{

    Two = 2,
    Three = 3,
    Four = 4,
    Five = 5,
    Six = 6,
    Seven = 7,
    Eight = 8,
    Nine = 9,
    Ten = 10,
    J = 11,
    Q = 12,
    K = 13,
    A = 14
}

static void Main()
{
    Console.OutputEncoding = System.Text.Encoding.Unicode;

    foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
        foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
        {
            for (int i = 0; i < 4; i++)
            {
                if ((int)val > 10)
                {

                    Console.WriteLine("{0}", val);
                }
                else
                {

                    Console.WriteLine("{0}", (int)val);

                }
            }

        }

}

}

1 个答案:

答案 0 :(得分:3)

是的,您可以在foreach循环体内的任何位置使用迭代器变量,即使该循环包含另一个循环:

foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
{
    foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
    {
        if ((int)val > 10)
        {
            Console.WriteLine("{0} of {1}", val, val1);
        }
        else
        {
            Console.WriteLine("{0} of {1}", (int)val, val1);
        }
    }
}

现在,如果你想重写这个以便所有的2将被打印在一起,然后是3,依此类推,只需交换循环:

foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
{
    foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
    {
        if ((int)val > 10)
        {
            Console.WriteLine("{0} of {1}", val, val1);
        }
        else
        {
            Console.WriteLine("{0} of {1}", (int)val, val1);
        }
    }
}

要连续编写它们,您可以使用Write而不是循环内部将每个值保持在一起,然后在循环外部WriteLine将该行与下一行分开:

foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
{
    foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
    {
        if ((int)val > 10)
        {
            Console.Write("{0} of {1}", val, val1);
        }
        else
        {
            Console.Write("{0} of {1}", (int)val, val1);
        }
    }

    Console.WriteLine();
}