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