Это отличный пример сценария, в котором методы Linq и расширения делают вещи действительно чистыми и легкими.
public static DirectoryInfo[] GetNonSystemDirectories(
this DirectoryInfo directory,
string searchPattern,
SearchOption searchOption)
{
return directory.GetDirectories(searchPattern, searchOption)
.Where(subDir => (subDir.Attributes & FileAttributes.System) == 0)
.ToArray();
}
Если вы создаете приложение .net v2, тогда вы можете использовать LinqBridge , чтобы предоставить вам доступ ко всем классным методам Linq to objects (таким как Where () и ToArray () выше).
Редактировать
В .net v4 вы бы использовали EnumerateDirectories вместо GetDirectories , что позволяет вам перебирать результаты без предварительного построения массива в памяти.
public static IEnumerable<DirectoryInfo> EnumerateNonSystemDirectories(
this DirectoryInfo directory,
string searchPattern,
SearchOption searchOption)
{
return directory.EnumerateDirectories(searchPattern, searchOption)
.Where(subDir => (subDir.Attributes & FileAttributes.System) == 0);
}