实例化所有可能的枚举组合

时间:2015-05-30 01:12:46

标签: c# class enums

我无法迭代所有可能的枚举组合。我不太熟悉它们,因为我刚刚开始使用C#而且是从C语言和汇编语言等低级语言进入。

public enum enumA { A1, A2, A3 }
public enum enumB { B1, B2, B3 }

public class foo
{
    private enumA enumAfoo;
    private enumB enumBfoo;

    public foo()
    {
    }
    public foo(enumA A, enumB B)
    {
        enumAfoo = A;
        enumBfoo = B;
    }
}

public class fooTwo
{
    private List<foo> allCombinations = new List<foo>();
    public fooTwo()
    {

    }
    public List<foo> GetList()
    {
        return allCombinations;
    }
    public fooTwo(bool check)
    {
        if (check)
        {
            foreach (enumA i in Enum.GetValues(typeof(enumA)))
            {
                foreach (enumB j in Enum.GetValues(typeof(enumB)))
                {
                    allCombinations.Add(new foo(i, j));
                }
            }
        }
    }
}

当我在一个简单的检查输出中运行此代码时,我不会得到我之后的内容。示例主要在下面。我得到的输出只是&#34; TestingGround.foo&#34;重复6次,测试地是我的整体命名空间。我不知道我的实例化列表的逻辑是否存在问题,或者我是如何将其转换为字符串并输出的,但我非常喜欢在#&#s中提供一些帮助# 39;这是执行此操作的正确程序。

class Program
{
    static void Main(string[] args)
    {
        fooTwo A = new fooTwo(true);
        List<foo> list = A.GetList();
        foreach (foo j in list)
        {
            Console.WriteLine(j.ToString());
        }
        Console.ReadKey();
    }
}

2 个答案:

答案 0 :(得分:2)

ToString()返回对象的默认表示形式。您需要创建自己的ToString()方法,返回您需要的内容。例如:

public class foo
{
    private enumA enumAfoo;
    private enumB enumBfoo;

    public foo()
    {
    }
    public foo(enumA A, enumB B)
    {
        enumAfoo = A;
        enumBfoo = B;
    }
    public override string ToString()
    {
        return enumAfoo.ToString() + "," + enumBfoo.ToString();
    }
}

答案 1 :(得分:0)

请记住,Enum具有Integer基础值(顺便说一下,它必须是唯一的:您可以通过简单(int)类型转换获得它)。所以,你在每个枚举中基本上都有值:0,1,2。现在,基于字符串连接的独特组合是:00,01,02,10,11,12,20,21,22。它是你在寻找什么?否则,您可以对基础int值应用“+”运算符(但它只会生成5个唯一值)。

另一种情况是字符串的串联:在这种情况下你应该使用ToString()方法来获得那些“A1”,“B1”等的组合(假设“+”运算符应用于字符串)。此外,您可以使用String.Concat(enum1,enum2)方法作为快捷方式;在这种情况下,您可以省略ToString(),因为String.Concat()会将正确的类型转换为字符串。

希望这可能会有所帮助。最好的问候,