Похоже, это должно сработать:
var duplicateNames = files.GroupBy(file => file.Name)
.Where(group => group.Count() > 1)
.Select(group => group.Key);
Сейчас самое подходящее время для изучения LINQ - .Это невероятно полезно - время, потраченное на его изучение (даже просто LINQ to Objects), окупится очень быстро.
РЕДАКТИРОВАТЬ: Хорошо, если вы хотите, чтобы оригинал FileInfo
для каждой группы, просто сбросьте select:
var duplicateGroups = files.GroupBy(file => file.Name)
.Where(group => group.Count() > 1);
// Replace with what you want to do
foreach (var group in duplicateGroups)
{
Console.WriteLine("Files with name {0}", group.Key);
foreach (var file in group)
{
Console.WriteLine(" {0}", file.FullName);
}
}