Linq
アイテムのリスト内からアイテムのリストを取得して辞書に変換するステートメントに苦労しています。
「コントロール」のリストを持つ「Windows」のリストがありますが、1つのコントロールタイプにもコントロールのリストがあり、それを理解できないようです(そして、Linqを理解したと思ったとき:))
現在動作中のネストされた foreach ループ
public static Dictionary<int, Dictionary<int, bool>> _windowControlVisibilityMap = new Dictionary<int, Dictionary<int, bool>>();
public static void RegisterControlVisibility(IEnumerable<GUIWindow> windows)
{
_windowControlVisibilityMap.Clear();
foreach (var window in windows)
{
var controlMap = new Dictionary<int, bool>();
foreach (var control in window.Controls)
{
if (control is GUIGroup)
{
foreach (var grpControl in (control as GUIGroup).Controls)
{
controlMap.Add(grpControl.ControlId, grpControl.IsWindowOpenVisible);
}
}
controlMap.Add(control.ControlId, control.IsWindowOpenVisible);
}
_windowControlVisibilityMap.Add(window.WindowId, controlMap);
}
}
同じことをするためのLinqクエリでのばかげた試み。(これは機能しません)
public static Dictionary<int, Dictionary<int, bool>> _windowControlVisibilityMap = new Dictionary<int, Dictionary<int, bool>>();
public static void RegisterControlVisibility2(IEnumerable<GUIWindow> windows)
{
_windowControlVisibilityMap.Clear();
foreach (var window in windows)
{
var dictionary = window.Controls.Select(k => new KeyValuePair<int, bool>(k.ControlId, k.IsWindowOpenVisible))
.Concat(window.Controls.OfType<GUIGroup>().SelectMany(grp => grp.Controls)
.Select(k => new KeyValuePair<int, bool>(k.ControlId, k.IsWindowOpenVisible)));
// _windowControlVisibilityMap.Add(window.WindowId, dictionary);
}
}
このLinqステートメントを機能させるために誰かが私を正しい方向に向けることができれば、それは素晴らしいでしょう:)
ここにあなたが私を助けるのに役立ついくつかのモックオブジェクトがあります.LOL
public class GUIWindow
{
public int WindowId { get; set; }
public List<GUIControl> Controls { get; set; }
}
public class GUIControl
{
public int ControlId { get; set; }
public bool IsWindowOpenVisible { get; set; }
}
public class GUIGroup : GUIControl
{
public List<GUIControl> Controls { get; set; }
}
ありがとう