【问题标题】:why can't I populate the sub lists为什么我不能填充子列表
【发布时间】:2014-08-01 05:41:01
【问题描述】:

现在我遇到了填充一些子列表的问题。我有一个名为“列表”的 FileInfo 类型的主列表,其中包含数千个文件。我想要做的是将这个主列表拆分为几个子列表,每个子列表都包含一组具有相同名称的文件。我是这样做的:

var File = list;
string[] foldername = Names.Distinct().ToArray();
List<TreeNode> N1 = new List<TreeNode>();
List<FileInfo>[] sublist = new List<FileInfo>[foldername.Length];

for (int j = 0; j < foldername.Length; j++)
{
    N1.Add(clicked.Nodes.Add(foldername[j]));
    foreach (FileInfo file in File)
    {
        if (file.Name== N1[j].Name)
                sublist[j].Add(file);
    }
}

例如文件夹名称数组有 7 个元素,所以我想要有 7 个子列表。每个子列表中包含的文件与树节点 N1[j] 具有相同的名称。 然而,结果是

sublist[j].Add(file)

根本不执行,每个子列表都是空的。我不知道出了什么问题。有人知道吗?谢谢

【问题讨论】:

  • 我可以建议你做Names.GroupBy(x =&gt; x).ToList()吗? (注意这仍然是字符串而不是FileInfo
  • @jcraffael 您确定您的File 名称与Names 名称匹配吗?我认为if (file.Name== N1[j].Name) 永远不会被评估为true
  • @jcraffael N1 中存储了什么?如果它们包含包含路径名的文件名,则字符串将不同。您是否尝试过 file.Name.Equals(N1[j].Name) 而不是 == ?
  • @Dennis_E 在 .NET String 类型上,Equals== 相同,除了后者您不必执行显式 null 保护,因为您实际上并没有调用方法在实例上。 source
  • @Maarten 不完全是,实际上 file.Name.Substring(0,4) 应该等于 N1[j].Name。在我的代码中是这样的。这里我只是想简化一下代码。

标签: c# list


【解决方案1】:

线

List<FileInfo>[] sublist = new List<FileInfo>[foldername.Length];

实际上并没有创建一个带有空列表的数组,它创建了一个带有 NULL 引用的数组。我认为您应该创建一个空列表的实例,并将其存储在数组中。

【讨论】:

  • 没错!所以我的最后一句话“sublist[j].Add(file)”是用来填充它们的!
  • 我的小错误,您正在创建一个包含 NULL 引用的数组。我认为您应该创建空列表实例,并将它们设置存储在数组中。
  • 也许你是对的。但这意味着我将创建 7 次“Listsublist = new List()”并将它们存储在像“List[]Sublist={sublist1, sublist2....sublist7}”这样的数组中?如果是这样,那真的很不方便,尤其是当数组的长度很大时
  • @jcraffael for (int j = 0; j &lt; foldername.Length; j++) { sublist[j] = new List&lt;FileInfo&gt;(); ...
  • 您的代码有两个输入:listNameslistFileInfo 的列表/可枚举,Names 是字符串列表。它们包含相同的数据吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多