boolean hogeFlg = false; if (hogeFlg){ return; }else{ hogeFlg = false; };
このソースを汎用関数インタフェースにラムダ式を使った一文で入れたいのですが、Returnをラムダに入れると当然ラムダ部分の別メソッドとしてのReturnとして認識され、結果なにもしないことになります。
どうしましょ・・・
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
こんにちは。
質問から情報を削りすぎで質問内容が理解できません。
「ラムダ式でメソッドを抜ける」「汎用関数インタフェースにラムダ式を使った一文で入れたい」というのは文章の意味が通っていませんし、そもそも汎用関数インターフェースというのがなんなのかも質問文には書かれていません。
「boolean hogeFlg = false;」というのはメンバ変数でしょうか?であれば、ラムダ式に入れるソースではないと思いますが。
何を聞きたいのか多大に推測しつつ回答してみます。
「ラムダ式を記述している元の関数の処理を、ラムダ式の中の記述を用いて中断できるか」という意味でいいんでしょうか?
これは不可能です。
ラムダ式は記述こそ関数内に書かれているものですが、その実体はメソッドそのものです。メソッドが呼び出し元のメソッドを中断させるには、例外を発生させるくらいしかありません。
さらに言えば、ラムダ式を特定の関数に渡したからといって、「そのラムダ式が関数内で実行されるとは限らない」ということを忘れています。実行されるかどうかも渡した先に依存しているのに、それを使って制御構造を構築するのは無理がありすぎです。
本当は「それを使って何をしたいのか」が質問からは読み取れないため、申し訳ないですがこれ以上の回答は不可能です。
なんとなくですが、普通は戻り値や例外などを正しく使って制御構造を組むべき場面のように見えますが、そういう意味なら、ここでラムダ式を何らかの処理に使うこと自体がそもそも不適切だということになります。
投稿2017/02/06 01:17
総合スコア4304
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/06 03:49
2017/02/06 04:32

0
ベストアンサー
何がしたいのかよくわからなかったのですが
もし、
C#
1void NiceMethod(Action action){ 2 action(); 3 Console.WriteLine("hogehoge"); 4}
C#
1NiceMethod(()=>{ 2/* 3ここの記述をどうにかして 4Console.WriteLine("hogehoge");を 5飛ばしたい 6*/ 7});
ということであれば無理です。
素直にatcionに戻り値を持たせて判定しましょう。
(例外投げれば抜けられますが、その例外の使い方は褒められたものじゃないです。)
投稿2017/02/06 01:16
編集2017/02/06 01:21総合スコア13553
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ozwkさんの話であれば、逆にコールバック関数として、後続処理をラムダで渡すのがいいと思います。
C#
1Main(){ 2 Fuga(()=>Console.WriteLine("hogehoge")); 3} 4 5void Fuga(Action collback){ 6 // 条件を満たさないときは後続処理が実行されない。 7 if ! IsSomeDicision() return; 8 collback(); 9}
投稿2017/02/06 03:55
総合スコア2884
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。