Как поместить объект своего класса в делегат PredicateC#

Место общения программистов C#
Ответить
Гость
 Как поместить объект своего класса в делегат Predicate

Сообщение Гость »


Я делаю класс обработки данных, возврат из метода getData которого осуществляется на основе переданной ему функции с помощью делегата Predicate. Метод getData планируется использовать и другими классами, поэтому я использовал общий Но я не могу поместить объект своего класса в параметр делегата

Я хотел передать обобщение делегату, но не знаю, как это сделать. Я также пытался поместить свой класс непосредственно в функцию, но это тоже не помогло.

Программа общедоступного класса { общественная статическая пустота Main() { var result1 = новый MyDataProcessing().GetData("C:\\",MyFunc); var result2 = новый MyDataProcessing().GetData("C:\\", MyFunc2); } static bool MyFunc(MyFile file)=>file.FileInfo.Name.Contains("A"); static bool MyFunc2 (файл MyFile) => file.FileInfo.Length>1000; } интерфейс MyData { } открытый класс MyFile:MyData { общедоступный MyFile (имя строки) { FileInfo = новый FileInfo (имя); } общественный FileInfo FileInfo {получить; } } открытый класс MyDataProcessing { общедоступный список GetData(строковый путь, Predicate? filter = null) { Список список = новый(); файлы IEnumerable; if (filter != null && typeof(T).Name — MyFile) { files = Directory.EnumerateFiles(path).Where(x => filter(new MyFile(x))); foreach (файл var в файлах) list.Add(новый MyFile(файл)); } список возврата; } } Спасибо! Я учел ваши комментарии и вот что получилось, есть ли комментарии по этому коду?
публичный класс Программа { public bool MyFunc (данные IMyData) { if (данные — MyFile, myfile) { return myfile.FileInfo.Name.Contains("A"); } вернуть ложь; } public bool MyFunc2 (данные IMyData) { if (данные — MyFile, myfile) { вернуть myfile.FileInfo.Length > 1000; } вернуть ложь; } общественная статическая пустота Main() { вар р = новая программа(); var result1 = new MyDataProcessing().GetData("C:\\", p.MyFunc); var result2 = new MyDataProcessing().GetData("C:\\", p.MyFunc2); } общедоступный интерфейс IMyData { } открытый класс MyFile: IMyData { общедоступный MyFile (имя строки) { FileInfo = новый FileInfo (имя); } общественный FileInfo FileInfo {получить; } } открытый класс MyDataProcessing { общедоступный список GetData (строковый путь, Predicate? Filter = null) { List list = new(); файлы IEnumerable; если (фильтр!= ноль) { files = Directory.EnumerateFiles(path).Where(x => filter(new MyFile(x))); foreach (файл var в файлах) list.Add(новый MyFile(файл)); } список возврата; } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»