引数があって、戻り値がboolの場合、Predicate<T>を使うといい。
https://docs.microsoft.com/ja-jp/dotnet/api/system.predicate-1?view=netframework-2.0
ラムダ式のトピックで作ったファイルチェックデリゲートをPredicate<T>に置き換える。
まず、ファイルチェックデリゲートのプログラムだけを書くと、
// 名前空間の登録 using System; // 共通データ型と基本クラス(System名前空間) using System.IO; // ファイル入出力とデータストリーム(System.IO名前空間) // メインクラス class MainClass // MainClassの定義 { // デリゲートの宣言 delegate bool FileCheckDelegate(string filename); // ファイルが存在するかをチェックする関数を持つデリゲート. // メインメソッド static void Main() // Mainメソッドの定義 { // ファイルチェックデリゲートの生成.(処理内容をラムダ式で定義.) FileCheckDelegate fcd = (filename) => { // ファイルが存在するかをチェック. if (File.Exists(filename)) // File.Existsでfilenameなるファイルが存在するかチェック. { // 存在する場合. Console.WriteLine(filename + " is Exists."); // "Exists"と出力. return true; // trueを返す. } else { // 存在しない場合. Console.WriteLine(filename + " is not Exists."); // "not Exists"と出力. return false; // falseを返す. } }; // "test.txt"があるかどうかチェック. if (fcd("test.txt")) // fcdに"test.txt"を渡す. { // OK Console.WriteLine("Check OK."); // "Check OK."と出力. } else { // NG Console.WriteLine("Check NG."); // "Check NG."と出力. } } }
で、ここからデリゲート型の宣言を削除し、定義済みデリゲートPredicate<T>を使うと、
こうなる。
test.txt is Exists. Check OK. 続行するには何かキーを押してください .
ここは変わらない。
Sample/dotnet/Predicate_T/Predicate_T/src/Predicate_T_ at master · bg1bgst333/Sample · GitHub