【发布时间】:2014-04-04 15:16:41
【问题描述】:
我有以下课程:
public class SerializedDelegate
{
public List<GOEntry> goEntries = new List<GOEntry>();
}
public class GOEntry
{
public string go;
public List<MBEntry> mbEntries = new List<MBEntry>();
}
public class MBEntry
{
public string mb;
public List<MethodEntry> methodsEntries = new List<MethodEntry>();
}
public class MethodEntry
{
public string method;
}
还有这个数据:
var sd = new SerializedDelegate();
var eGo1 = new GOEntry { go = "Player1" };
var eGo2 = new GOEntry { go = "Player2" };
var eMb1 = new MBEntry { mb = "MB1" };
var eMb2 = new MBEntry { mb = "MB2" };
var eM1 = new MethodEntry { method = "target1" };
var eM2 = new MethodEntry { method = "target2" };
var eM3 = new MethodEntry { method = "target3" };
var eM4 = new MethodEntry { method = "target4" };
eMb1.methodsEntries.Add(eM1);
eMb1.methodsEntries.Add(eM2);
eMb2.methodsEntries.Add(eM3);
eMb2.methodsEntries.Add(eM4);
eGo1.mbEntries.AddRange(new[] { eMb1, eMb2 });
eGo2.mbEntries.Add(eMb1);
sd.goEntries.AddRange(new[] { eGo1, eGo2 });
我正在尝试做的 - 以以下形式打印它们:
Player1: MB1.target1
Player1: MB1.target2
Player1: MB2.target3
Player1: MB2.target4
Player2: MB1.target1
Player2: MB1.target2
我已经使用 foreach 循环打印了它们:
foreach (var goEntry in sd.goEntries) {
foreach (var mbEntry in goEntry.mbEntries) {
foreach (var methodEntry in mbEntry.methodsEntries)
Console.WriteLine(goEntry.go + ": " + mbEntry.mb + "." + methodEntry.method);
}
}
但我想以 LINQ 的方式来做——我想构造一个与我想要打印它们的方式相对应的 LINQ 结构——这样我只需要一个 foreach 循环(所以构造的可枚举的长度就是数字方法总数 - 在本例中为 6)。
我是这样开始的 - 但不知道如何继续:
var entries = sd.goEntries
.Select(g => new
{
GO = g.go,
MBs = g.mbEntries,
Methods = g.mbEntries.SelectMany(e => e.methodsEntries)
});
最终,这些方法条目将出现在一个弹出窗口中——这就是为什么我需要一个结构,通过它我可以很容易地分辨出哪个MBEntry 属于哪个GOEntry,以及MethodEntry 属于哪个@987654329 @。
对不起,如果我不够清楚 - 如果是这样,请说出来。
谢谢。
【问题讨论】: