我想知道是否有可能使一个类的字段枚举,以便您可以使用for或foreach循环遍历它们。我看过几个版本,描述了如何以这种方式枚举包含其他结构的结构。
我也知道我可能完全错读了关于该主题的MSDN article。
所以我的问题是,是否可以使用IEnumerable或类似的接口在类中的字段上进行迭代?
我想做这样的事情:
private class Integers
{
public int int1;
public int int2;
public int int3;
public int int4;
public int int5;
public int int6;
public int int7;
public int int8;
}
foreach(int I in Integers){
Console.WriteLine(I);
}
答案 0 :(得分:0)
听起来像您在寻找一个枚举:enum docs
答案 1 :(得分:0)
可以使用Reflection遍历类中的字段。
这是一个示例:
public class MyClass
{
public int I1;
public int I2;
public int I3;
public int I4;
}
// typeof(MyClass).GetFields() return FieldInfo[], which is IEnumerable<T>
foreach (var field in typeof(MyClass).GetFields())
{
Console.WriteLine(field.Name);
}
// I1
// I2
// I3
// I4
但是,您可能应该使用其他东西。数组可能更合适。
答案 2 :(得分:0)
可能与反射有关:
var Integers = new Integers{
int1 = 50,
int2 = 42,
// etc. ...
};
foreach (var field in typeof(Integers).GetFields())
{
Console.WriteLine(field.GetValue(Integers));
}
但是您想要这样做的事实可能表明您根本不应该使用类。
您要枚举吗?
private enum Integers
{
int1 = 50,
int2 = 42,
// etc.
}
foreach (var value in Enum.GetValues(typeof(Integers)).Cast<int>())
{
Console.WriteLine(value);
}
列表更合适吗?
var integers = new List<int>() { 50, 42, /*etc*/};
foreach (var value in integers)
{
Console.WriteLine(value);
}
还是字典?
var integers = new Dictionary<string, int>() {
["int1"] = 50,
["int2"] = 42,
/*etc*/
};
foreach (var keyValuePair in integers)
{
Console.WriteLine(keyValuePair.Value);
}