C# C中嵌套的for循环,需要从多个类文件中获取对象数据

C# C中嵌套的for循环,需要从多个类文件中获取对象数据,c#,C#,我有3个模型,每个模型有2个静态数据对象。模型为“TransactionLine1”、“TransactionLine2”、“TransactionLine3” TransactionLine1.cs 我可以使用foreach单步遍历特定类文件的每个对象。但是我怎样才能让所有的人都得到想要的结果呢?我是C新手,在这里有点挣扎。我不确定给定示例背后的实际问题是什么,所以我不能建议任何更聪明的方法来优化类本身的结构。但是,您可以创建一个要循环的类类型数组,选择它们的字段以及字段索引,然后按字段索引和

我有3个模型,每个模型有2个静态数据对象。模型为“TransactionLine1”、“TransactionLine2”、“TransactionLine3”

TransactionLine1.cs


我可以使用foreach单步遍历特定类文件的每个对象。但是我怎样才能让所有的人都得到想要的结果呢?我是C新手,在这里有点挣扎。

我不确定给定示例背后的实际问题是什么,所以我不能建议任何更聪明的方法来优化类本身的结构。但是,您可以创建一个要循环的类类型数组,选择它们的字段以及字段索引,然后按字段索引和类型索引按特定顺序对所选结果排序

看看这个例子:

var types = new Type[]
{
    typeof(TransactionLine1),
    typeof(TransactionLine2),
    typeof(TransactionLine3)
};

List<object> items = types
    .SelectMany((type, typeIndex) =>
        type.GetFields(BindingFlags.Static | BindingFlags.Public)
            .Select((field, fieldIndex) => new
            {
                TypeIndex = typeIndex,
                FieldIndex = fieldIndex,
                Field = field.GetValue(null)
            }))
    .OrderBy(item => item.FieldIndex)
    .ThenBy(item => item.TypeIndex)
    .Select(item => item.Field)
    .ToList();

Console.WriteLine(string.Join(Environment.NewLine, items));
使用您提供的示例中的代码,我得到以下输出:


我不确定给定示例背后的实际问题是什么,所以我不能建议任何更聪明的方法来优化类本身的结构。但是,您可以创建一个要循环的类类型数组,选择它们的字段以及字段索引,然后按字段索引和类型索引按特定顺序对所选结果排序

看看这个例子:

var types = new Type[]
{
    typeof(TransactionLine1),
    typeof(TransactionLine2),
    typeof(TransactionLine3)
};

List<object> items = types
    .SelectMany((type, typeIndex) =>
        type.GetFields(BindingFlags.Static | BindingFlags.Public)
            .Select((field, fieldIndex) => new
            {
                TypeIndex = typeIndex,
                FieldIndex = fieldIndex,
                Field = field.GetValue(null)
            }))
    .OrderBy(item => item.FieldIndex)
    .ThenBy(item => item.TypeIndex)
    .Select(item => item.Field)
    .ToList();

Console.WriteLine(string.Join(Environment.NewLine, items));
使用您提供的示例中的代码,我得到以下输出:

这应该起作用:

forint i=1;我这应该行得通:


forint i=1;谢谢你的回答!如果我从数据库中提取实际数据(可能有数百行事务),我不确定这是否有效。尽管示例使用的是静态数据,但它应该能够处理数量可变的事务。LMK如果我完全错了?3分钟前它不起作用,现在起作用了。很抱歉,它不适用于可变数量的事务…:谢谢你的回答!如果我从数据库中提取实际数据(可能有数百行事务),我不确定这是否有效。尽管示例使用的是静态数据,但它应该能够处理数量可变的事务。LMK如果我完全错了?3分钟前它不起作用,现在起作用了。很抱歉,它不适用于可变数量的事务…:
public class TransactionLine3
    {
        public string Id { get; set; }
        public string Name { get; set; }

        public static readonly TransactionLine3 T1 = new TransactionLine3
        {
            Id = "10",
            Name = "TL31"
        };

        public static readonly TransactionLine3 T2 = new TransactionLine3
        {
            Id = "11",
            Name = "TL32"
        };

        public static List<TransactionLine3> TransactionsL01
        {
            get
            {
                return typeof(TransactionLine3).GetFields(BindingFlags.Static | BindingFlags.Public)
                    .Select(f => (TransactionLine3)f.GetValue(null))
                    .ToList();
            }
        }
T1 Line1 (from TransactionLine1.cs)
T1 Line2 (from TransactionLine2.cs)
T1 Line3 (from TransactionLine3.cs)

T2 Line1 (from TransactionLine1.cs)
T2 Line2 (from TransactionLine2.cs)
T2 Line3 (from TransactionLine3.cs)
var types = new Type[]
{
    typeof(TransactionLine1),
    typeof(TransactionLine2),
    typeof(TransactionLine3)
};

List<object> items = types
    .SelectMany((type, typeIndex) =>
        type.GetFields(BindingFlags.Static | BindingFlags.Public)
            .Select((field, fieldIndex) => new
            {
                TypeIndex = typeIndex,
                FieldIndex = fieldIndex,
                Field = field.GetValue(null)
            }))
    .OrderBy(item => item.FieldIndex)
    .ThenBy(item => item.TypeIndex)
    .Select(item => item.Field)
    .ToList();

Console.WriteLine(string.Join(Environment.NewLine, items));
public override string ToString() => $"Id: {Id}, Name: {Name}";
TL1:
T1 ID: 10
TL1:
T1 Name: TL11
TL2:
T1 ID: 10
TL2:
T1 Name: TL21
TL3:
T1 ID: 10
TL3:
T1 Name: TL31
TL1:
T2 ID: 11
TL1:
T2 Name: TL12
TL2:
T2 ID: 11
TL2:
T2 Name: TL22
TL3:
T2 ID: 11
TL3:
T2 Name: TL32