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