Pilot
()プロパティを持つ()オブジェクトの配列がHanger
あります。これはnullの場合があり、それ自体が(List<Plane>
)プロパティを持っています。テストの目的で、これを単純化して、プロパティPilotName
(string)とPlanes
(array)を持つ匿名オブジェクトに「フラット化」したいのですが、nullHanger
プロパティまたは空のプロパティを処理する方法がわかりませんPlanesList
。
(なぜ匿名オブジェクトですか?私がテストしているAPIのオブジェクトは読み取り専用であり、テストを「宣言型」にしたいので、自己完結型で、シンプルで読みやすいです...しかし、他の提案も受け付けています。 m LINQについてもっと学ぼうとしています。)
例
class Pilot
{
public string Name;
public Hanger Hanger;
}
class Hanger
{
public string Name;
public List<Plane> PlaneList;
}
class Plane
{
public string Name;
}
[TestFixture]
class General
{
[Test]
public void Test()
{
var pilots = new Pilot[]
{
new Pilot() { Name = "Higgins" },
new Pilot()
{
Name = "Jones", Hanger = new Hanger()
{
Name = "Area 51",
PlaneList = new List<Plane>()
{
new Plane { Name = "B-52" },
new Plane { Name = "F-14" }
}
}
}
};
var actual = pilots.Select(p => new
{
PilotName = p.Name,
Planes = (p.Hanger == null || p.Hanger.PlaneList.Count == 0) ? null : p.Hanger.PlaneList.Select(h => ne
{
PlaneName = h.Name
}).ToArray()
}).ToArray();
var expected = new[] {
new { PilotName = "Higgins", Planes = null },
new
{
PilotName = "Jones",
Planes = new[] {
new { PlaneName = "B-52" },
new { PlaneName = "F-14" }
}
}
};
Assert.That(actual, Is.EqualTo(expected));
}
差し迫った問題は、次のような回線expected... Planes = null
エラーです。
匿名タイプのプロパティに割り当てることはできませんが、根本的な問題は、
null
inactual
を使用することnull
がそもそも最善のアプローチではないことである可能性があることを認めます。
でnull配列を割り当てる方法、またはでexpected
とは異なるアプローチを取る方法についてのアイデアnull
はありますactual
か?