1

我有一个休息服务,其中有一个组列表,每个组都有一个 GroupName,在我的客户端,我试图将这些 GroupName 添加到变量 groupbox 的列表中(组框的数量取决于我的休息组服务中有多少 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 回答