【发布时间】: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 => 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。在我的代码中是这样的。这里我只是想简化一下代码。