1

各グループにGroupNameがあるグループのリストを持つRESTサービスがあり、クライアント側でそれらのGroupNameを変数groupboxのリストに追加しようとしています(グループボックスの数は、RESTグループサービスにあるGroupNameの数によって異なります) )誰かがコードを手伝ってくれる?:

        string uriGroups = "http://localhost:8000/Service/Group";
        XDocument xDoc = XDocument.Load(uriGroups);
        var groups = xDoc.Descendants("Group")
        .Select(n => new
        {
            GroupBox groupbox = new GroupBox();
            groupbox.Header = String.Format("Group #{0}", n.Element("GroupName");
            groupbox.Width = 100;
            groupbox.Height = 100;
            groupbox.Margin = new Thickness(2);

            StackPanel stackPanel = new StackPanel();
            stackPanel.Children.Add(groupbox);
            stackPanel.Margin = new Thickness(10);

            MainArea.Children.Add(stackPanel);
        }

これは正しくありません私はそれを行う方法に固執しています。

編集:

    public Reports()
    {
        InitializeComponent();

        string uriGroups = "http://localhost:8000/Service/Group";
        XDocument xDoc = XDocument.Load(uriGroups);
        foreach(var node in xDoc.Descendants("Group"))
        {

            GroupBox groupbox = new GroupBox();
            groupbox.Header = String.Format("Group #{0}", node.Element("Name")); 
            groupbox.Width = 100;
            groupbox.Height = 100;
            groupbox.Margin = new Thickness(2);

            StackPanel stackPanel = new StackPanel();
            stackPanel.Children.Add(groupbox);
            stackPanel.Margin = new Thickness(10);

            MainArea.Children.Add(stackPanel);
        }

    }
    public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
    {
        foreach (var item in enumerable)
            action(item);

        return enumerable;
    }
4

1 に答える 1

2

1)LINQSelect拡張機能を使用してコレクションを反復処理し、何かを実行するべきではありません。要素を新しい形式に変換するためにのみ使用する必要があります。このようなことをしたい場合は、foreachステートメントを使用するか、新しいLINQ拡張機能を作成して次のように列挙可能なものを処理します。

  public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
  {
       foreach(var item in enumerable)
           action(item);

       return enumerable;
  }

2)上記のコードは構文的に壊れているため、コンパイルしないでください。あなたがしようとしているのは、新しい匿名タイプ(new { })を作成することです。このオブジェクトにプロパティを作成しておらず、代わりにランダムなコード行(許可されていない)を実行しようとしているため、これは無効です。匿名タイプを作成するときは、次のようにします。

 Enumerable.Range(0, 10).Select(x => new { Number = x });
 // Creates a series of 10 objects with a Number property

3)これを行うには、コードを適切なコードにリファクタリングする必要があるようです。コンパイルされていない部分を除いて、あなたが抱えている特定の問題は見ていません。

于 2012-04-16T17:53:54.703 に答える