ふらっと C#,C♯,C#(初心者用) Part161 (78レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
16: (ワッチョイ 752d-jpvh) 02/25(火)19:57 ID:knCfbka80(1/4) AAS
ラムダ式をデリゲートに代入する事無く、即値のまま関数として呼び出すにはどう書けば良いのでしょうか?
サンプルの1~2行目のように一旦デリゲートに代入してから関数呼び出しするのでなく、3行目のような雰囲気で直接関数として呼び出したいのです。
Func<double, double> func = x => Math.Sin(x);
double ret1 = func(2 * 3.14 * 0.5 * 0.5 * 1.73 * 1.73);
double ret2 = (x => Math.Sin(x))(2 * 3.14 * 0.5 * 0.5 * 1.73 * 1.73);
これだけですとラムダ式・匿名メソッドを使う意味がないのですが、? : の三項条件演算子やswitch式などで選ばれたラムダ式・匿名メソッドを呼び出したい場面がありました。
17: 16 (ワッチョイ 752d-jpvh) 02/25(火)20:29 ID:knCfbka80(2/4) AAS
半歩前進しました。デリーゲトへの代入式(の戻り値)を使用すれば呼び出せました。
Func<double, double> func;
double ret3 = (func = x => Math.Sin(x))(2 * 3.14 * 0.5 * 0.5 * 1.73 * 1.73);
ここからデリゲートを消せればシンプルに記述できそうです。
19: 16 (ワッチョイ 752d-jpvh) 02/25(火)21:00 ID:knCfbka80(3/4) AAS
いくつか書き忘れました。
double型の戻り値を重視したように見えるサンプルですが、実際はvoid型で副作用を持つ関数呼び出しです。
また、複数の関数が並ぶ中で、同じ引数を何度も何度も書きたくない/コピーしたくないというのが動機の一つです。
24: 16 (ワッチョイ 752d-jpvh) 02/25(火)22:08 ID:knCfbka80(4/4) AAS
>>22
キャストを使う事でデリゲート変数を排除できる事を確認しました。オブジェクトでないラムダ式をオブジェクト化?するところがキモなんですね。
美しさはともかくとして、文字数・タイプ数が減りシンプルになりました。
本当に助かりました。ありがとうございます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.443s*