Как поместить объект своего класса в делегат Predicate ⇐ 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(файл)); } список возврата; } }
Я делаю класс обработки данных, возврат из метода 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(файл)); } список возврата; } }
Мобильная версия