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



我在迭代所有可能的枚举组合时遇到麻烦。我对它们不太熟悉,因为我刚开始学习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));
                }
            }
        }
    }
}

当我在一个简单的检查输出中运行这段代码时,我没有得到我想要的。下面是Main示例。我得到的输出只是"TestingGround"。Foo"重复了6次,测试场地是我的整体命名空间。我不知道我的实例化列表的逻辑是否有问题,或者我如何将其转换为字符串并输出,但我非常希望在做这件事的正确过程中得到一些帮助。

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();
    }
}

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();
    }
}

请记住,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()将负责正确地将类型转换为string。

希望这能有所帮助。最好的祝福,

最新更新