相关疑难解决方法(0)

如何通过LINQ压扁树?

所以我有简单的树:

class MyNode
{
 public MyNode Parent;
 public IEnumerable<MyNode> Elements;
 int group = 1;
}
Run Code Online (Sandbox Code Playgroud)

我有一个IEnumerable<MyNode>.我想得到一个列表MyNode(包括内部节点对象(Elements))作为一个平面列表Where group == 1.如何通过LINQ做这样的事情?

.net c# linq tree .net-4.0

86
推荐指数
6
解决办法
4万
查看次数

是否可以实现递归"SelectMany"?

众所周知,Enumerable.SelectMany将序列序列展平为单个序列.如果我们想要一种能够使序列序列序列变平,等等递归的方法怎么办?

我很快就提出了一个实现使用ICollection<T>,即急切评估,但我仍然在摸索如何使用yield关键字进行懒惰评估.

static List<T> Flatten<T>(IEnumerable list)  {
    var rv = new List<T>();
    InnerFlatten(list, rv);
    return rv;
}

static void InnerFlatten<T>(IEnumerable list, ICollection<T> acc) {
    foreach (var elem in list) {
        var collection = elem as IEnumerable;
        if (collection != null) {
            InnerFlatten(collection, acc);
        }
        else {
            acc.Add((T)elem);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?任何.NET语言欢迎中的示例.

.net c# recursion f#

11
推荐指数
2
解决办法
3013
查看次数

如何从嵌套类List <T>获取展平列表?

我有一个使用这些相同例子的问题 - 这个问题集中在一个不同的问题上.鉴于以下课程:

   [XmlRoot]
   public class Family {

      [XmlElement]
      public List<Person> Person;
   }

   public class Person {

      [XmlAttribute("member")]
      public MemberType Member { get; set; }

      [XmlAttribute("id")]
      public int Id { get; set; }

      [XmlElement]
      public string Surname { get; set; }

      [XmlElement]
      public string Forename { get; set; }

      [XmlElement("Person")]
      public List<Person> People;
   }

   public enum MemberType {
      Father,
      Mother,
      Son,
      Daughter
   }
Run Code Online (Sandbox Code Playgroud)

如果Family有一个定义如下的方法:

public IEnumerable<Person> Find (Func<Person, bool> predicate) {
    //  how do I get …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-objects

7
推荐指数
2
解决办法
2968
查看次数

如何在Windows窗体中获取窗体的所有控件?

我有一个Form名字A.

A包含许多不同的控件,包括main GroupBox.这GroupBox包含许多表和其他GroupBoxes.我想找到一个控件,其形式有例如tab index 9 A,但我不知道哪个GroupBox包含这个控件.

我怎样才能做到这一点?

c# forms winforms

6
推荐指数
2
解决办法
1万
查看次数

如何展平一组对象(又包含集合)?

我有一个IEnumerable集合,它是分层的,因为一个元素包含几个元素.因此,如果我进行计数,我可能得到7-8作为返回int,当真的可能有500个项目(因为它们是嵌套的).

如何将此集合拼成一个包含所有元素且没有嵌套的集合?

谢谢

c# linq

6
推荐指数
1
解决办法
3578
查看次数

带有默认值的 C# LINQ SelectMany

我正在寻找一种优雅的解决方案,将集合中的子集合聚合为一个大集合。我的问题是某些子集合何时可能为空。

例如:

var aggregatedChildCollection = parentCollection.SelectMany(x=> x.ChildCollection);
Run Code Online (Sandbox Code Playgroud)

如果任何子集合对象为空,这将引发异常。一些替代方案是:

// option 1
var aggregatedChildCollection = parentCollection
    .Where(x=>x.ChildCollection != null)
    .SelectMany(x => x.ChildCollection);

// option 2
var aggregatedChildCollection = parentCollection
    .SelectMany(x => x.ChildCollection ?? new TypeOfChildCollection[0]);
Run Code Online (Sandbox Code Playgroud)

两者都可以工作,但我正在对父级上的相当多的子集合进行某种操作,并且它变得有点令人生厌。

我想要的是创建一个扩展方法来检查集合是否为空,如果是,选项 2 会做什么 - 添加一个空数组。但是我对 Func 的理解并没有达到我知道如何编写这种扩展方法的地步。我知道我想要的语法是这样的:

var aggregatedChildCollection = parentCollection.SelectManyIgnoringNull(x => x.ChildCollection);
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的扩展方法可以实现这一点?

c# linq extension-methods func

5
推荐指数
1
解决办法
2864
查看次数

使用LINQ Concat List <List <string >>中的所有字符串

我的问题是,因为这几乎是相同的一个,但名单维数为n.如何List<List<List...<string>>使用LINQ连接(n维列表)中的所有字符串?


注:有意为这两种情况下,ñ已知未知

.net c# linq

4
推荐指数
1
解决办法
935
查看次数

标签 统计

c# ×7

linq ×4

.net ×3

.net-4.0 ×1

extension-methods ×1

f# ×1

forms ×1

func ×1

linq-to-objects ×1

recursion ×1

tree ×1

winforms ×1