实例化所有可能的枚举组合
本文关键字:枚举 组合 有可能 实例化 | 更新日期: 2023-09-27 17:51:08
我在迭代所有可能的枚举组合时遇到麻烦。我对它们不太熟悉,因为我刚开始学习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。
希望这能有所帮助。最好的祝福,