R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

デリゲート厨

以下を見てくれ。こいつをどう思う?


Action a = (p < 0) ? this.AddPage : this.DeletePage;

エラー 1 'メソッド グループ' と 'メソッド グループ'' の間に暗黙的な変換がないため、条件式の型がわかりません。


なんてこった。
僕の大好きな3項演算子が使えないじゃないか!


Action a = this.AddPage;
if (p < 0) a =this.DeletePage;


時間がないから、こう書き直してやったら素直に通る・・・

さて、ここで

皆さんに問題です。

どうして最初の書き方だとコンパイルエラーが発生するのでしょうか?

#出題者が答えを知らないクイズを出題してみるテストw

投稿日時 : 2008年5月23日 11:29

Feedback

# re: デリゲート厨 2008/05/23 11:38 επιστημη

Action a = (p < 0) ?
 new Action(this.AddPage) : new Action(this.DeletePage);

なら通ります。
new Action による暗黙のwrap に先立って
二項演算 X : Y の X,Yが同じ型かを決定できないんですねぇ。

# re: デリゲート厨 2008/05/23 12:03 R・田中一郎

正解!!・・・φ(__;) メモメモ

正解をありがとうございました。
素直に、if 使った方がよさそうですね。

# re: デリゲート厨 2008/05/23 12:57 ghost_shell

遅かった...

> 素直に、if 使った方がよさそうですね。

Action a = this.AddPage;
<=>
Action a = new Action(this.AddPage);
だから(だよね?>詳しい人)、επι先生ので書けばいいと思うけど?

# re: デリゲート厨 2008/05/23 13:02 かるあ

ってことはこれでもいいのかな?試してない(汗
Action a = (p < 0)? (Action)this.AddPage: (Action)this.DeletePage;

# re: デリゲート厨 2008/05/23 13:05 Streetw☆

これもできました。それとキャストにしたりしました。
たしか、どちらかからどちらかに変換できれば良かったと思います。
Action a = (p < 0) ? (Action)this.AddPage : this.DeletePage;

>素直に、if 使った方がよさそうですね
もう不正解ですか?w

# re: デリゲート厨 2008/05/23 13:06 Streetw☆

Σあ、、被りましたorz

# re: デリゲート厨 2008/05/26 9:22 R・田中一郎

ghost_shell さん

>Action a = this.AddPage;
><=>
>Action a = new Action(this.AddPage);
>だから(だよね?>詳しい人)、επι先生ので書けばいいと思うけど?

そりゃそうなんですが、

Action a = Method1;

が良くて、

Action a = bool ? Method1 : Method2;

がダメな理由が知りたかった訳ですよ。

----------------------
かるあ さん

>ってことはこれでもいいのかな?試してない(汗

OK でした。

----------------------
Streetw☆ さん

>>素直に、if 使った方がよさそうですね
>もう不正解ですか?w

要するに、これって型推論な訳で、三項演算子で記述したいがために型推論を手助けするような書き方をしなければならないのって素敵だし爽やかではない気がします。

# re: デリゲート厨 2008/05/26 13:49 ghost_shell

素敵だし爽やかな方法はぼくの知る限り無いです。(型変換演算子のオーバーロードで実現できるかわかりませんが、使わない方法で。)

> 僕の大好きな3項演算子が使えないじゃないか!

とある中で、

> 素直に、if 使った方がよさそうですね。

というのが気になったもので。

3項演算子を使えないことよりも、型の明示をしないといけないことの方がRさん的には受け付けなかったわけですね。

タイトル
名前
Url
コメント