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

C# 实例化枚举的所有可能组合,c#,class,enums,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

我在迭代所有可能的枚举组合时遇到问题。我对它们不太熟悉,因为我刚刚开始学习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));
                }
            }
        }
    }
}
public enum enumA{A1,A2,A3}
公共枚举enumB{B1,B2,B3}
公开课foo
{
私人enumA enumAfoo;
私有enumB enumBfoo;
公共食物(
{
}
公共食品办公室(enumA A、enumB B)
{
enumAfoo=A;
enumBfoo=B;
}
}
公务舱
{
私有列表所有组合=新列表();
公众席
{
}
公共列表GetList()
{
返回所有组合;
}
公共足部WO(bool检查)
{
如果(检查)
{
foreach(Enum.GetValues中的enumA i(typeof(enumA)))
{
foreach(Enum.GetValues中的enumB j(typeof(enumB)))
{
添加(新的foo(i,j));
}
}
}
}
}
当我在一个简单的检查输出中运行这段代码时,我没有得到我想要的。下面是主样本。我得到的输出只是“TestingGround.foo”重复了6次,TestingGround是我的整个名称空间。我不知道我实例化列表的逻辑是否有问题,或者我如何将其转换为字符串并输出,但我非常希望能得到一些帮助,了解如何正确地执行此操作

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();
    }
}
类程序
{
静态void Main(字符串[]参数)
{
fooTwo A=新的fooTwo(真);
List=A.GetList();
foreach(列表中的foo j)
{
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()
将负责对字符串进行适当的类型转换


希望这能有所帮助。非常感谢,

因为您没有覆盖
foo.ToString()
,所以会调用默认实现。默认实现只返回类型name
TestingGround.foo
。啊,好吧,那么剩下的逻辑是正确的?我真的实例化了列表的所有组合吗?你说:“TestingGround.foo”重复了6次,但3*3=9。也许还有其他问题,但我看不出来。是的,对不起我的错误。这是9种类型,我只是粗略地看了一眼。因此,如果我不想使用ToString方法,我可以将变量类型转换为int并获得这些组合?这取决于“所有可能的枚举组合”的定义:是对int进行操作,还是对字符串进行操作,还是将int转换为字符串。如果在int上使用“+”,那么只会得到sum,这可能会有问题,因为有些值不是唯一的(我猜,将有5个唯一的值)。所以,这取决于你的定义。亲切问候,,