C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

メソッドにメソッドを渡す

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90396 / inTopicNo.1)  メソッドにメソッドを渡す
  
□投稿者/ B.B (9回)-(2019/03/07(Thu) 18:36:48)

分類:[C#] 

Visual Studio 2017

お世話になります

処理が失敗したらfalseを返すメソッドが複数あります(Method1〜
private void button1_Click(object sender, EventArgs e)
{
    bool isSuccessful;
    isSuccessful = Method1();
    isSuccessful = Method2();
}

各メソッドで失敗したときに何度か繰り返す処理を追加しました
private void button1_Click(object sender, EventArgs e)
{
    bool isSuccessful;
    isSuccessful = hogeMethod(Method1);  
    isSuccessful = hogeMethod(Method2);   

}

private bool hogeMethod(Func<bool> hoge)
{
    int redoCount = 0;
    while (redoCount <= 1)
    {
        bool isSuccessful = hoge();
        if (isSuccessful)
        {
            return true;
        }
        else
        {
            redoCount++;
            //...失敗の原因を取り除く処理(原因は画像解析)
        }
    }
    return false;
}

文字列を引数に持つMethod3というのもあります。
isSuccessful = Method3("ほげほげ")

変更後は以下のようになりました。
isSuccessful = hogeMethod(Method3, "ほげほげ");

private bool hogeMethod(Func<string, bool> hoge, string s)
{
    int redoCount = 0;
    while (redoCount <= 1)
    {
        bool isSuccessful = hoge(s);
        if (isSuccessful)
        {
            return true;
        }
        else
        {
            redoCount++;
            //...失敗の原因を取り除く処理(原因は画像解析)
        }
    }
    return false;
}


このやり方だと引数の数が変わる度にほぼ同じ処理が今後も増えていくことになります。
hogeMethodの記述が一ヶ所で済むような方法はないでしょうか。
すべてのメソッドの戻り値はboolのみです
よろしくお願いします

引用返信 編集キー/
■90397 / inTopicNo.2)  Re[1]: メソッドにメソッドを渡す
□投稿者/ Hongliang (765回)-(2019/03/07(Thu) 18:48:23)
bool hogeMethod(Func<bool> hoge)
に対して、
isSuccessful = hogeMethod(() => Method3("ほげほげ"));
とやれば良いのではないでしょうか。
引用返信 編集キー/
■90398 / inTopicNo.3)  Re[2]: メソッドにメソッドを渡す
□投稿者/ B.B (10回)-(2019/03/07(Thu) 19:07:33)
No90397 (Hongliang さん) に返信
> bool hogeMethod(Func<bool> hoge)
> に対して、
> isSuccessful = hogeMethod(() => Method3("ほげほげ"));
> とやれば良いのではないでしょうか。

解決です、動作しました。ありがとうございます
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ