C#, Оптимизация кода, задать нужное количество параметров для метода
Здравствуйте. Имею такую задачу: проходиться по коллекции файлов, и проводить фильтр по определённым условиям. Причём условия формируются непосредственно перед проходом по всем файлам.
Выглядит сейчас это примерно так:
foreach (string f in FileList.MainList)
{
// max размер подходит?
if (max_size != 0)
continue ;
// min размер подходит?
if (min_size != 0)
continue ;
// Имя файла
if (filenameYES!=null || filenameNO!=null)
continue;
// Имя папки
if (pathnameYES != null || pathnameNO != null)
continue;
}
max_size,min_size,filenameYES,filenameNO и другие условия определяются ДО прохода по всем файлам. Для того чтобы ускорить выполнение кода, мне как-то нужно вывести проход по всем файлам в отдельный метод, и вызывать этот метод уже только с теми условиями, которые определены. То есть чтобы в каждом файле программа не думала какие условия заданы, а сразу проверяла только заданные условия. Просьба подсказать как сие осуществить
Есть несколько условий, например
1. Максимальный размер файла
2. Минимальный размер файла
3. Имя файла содержит букву А
Есть код, итогом которого должно стать понимание, какое из каждого из этих условий должно проверяться в цикле, а какое нет.
После этого идём в цикле по всем файлам и проверяем файлы только на те условия, которые, как определили ранее, должны проверяться.
Зачем это нужно - условий много, файлов много. Нужно чтобы проверились именно ненулевые, назовём их так, условия дабы ускорить процесс обработки
Если я правильно понял вопрос - можете использовать лямбды со "сложными" условиями.
Черновой набросок. Если хотите - можно использовать List < FileInfo >, вместо массива ну или свой класс с информацией вместо стандартного FileInfo.
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
public class FileFilter {
public FileFilter(string Path) {
files = Array.ConvertAll(
System.IO.Directory.EnumerateFiles(Path).ToArray(),
x => new FileInfo(x)
);
}
public IEnumerable< FileInfo >GetFiles(Func< FileInfo,bool > lambda) {
return files.Where(lambda);
}
protected FileInfo[] files;
}
static void Main(string[] args) {
FileFilter f = new FileFilter ("/home/папка =)");
Console.WriteLine("Все файлы, начинающиеся с .x (это Linux - всё ок =)");
foreach (FileInfo info in f.GetFiles(x => x.Name.StartsWith(".x")))
Console.WriteLine (info.Name);
Console.WriteLine("Все файлы, начинающиеся с ., но размером больше 1000:");
foreach (FileInfo info in f.GetFiles(x => x.Name.StartsWith(".") && x.Length > 1000))
Console.WriteLine (info.Name);
}
}
}

Я вообще не понял - в цикле нет ни одного действия, кроме проверок и continue. Там вообще есть какие-то действия? Если есть - то где именно? И что мешает вынести все проверки перед циклом?