我无法迭代所有可能的枚举组合。我不太熟悉它们,因为我刚刚开始使用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();
}
}
答案 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()
会将正确的类型转换为字符串。
希望这可能会有所帮助。最好的问候,