2016-09-26 10 views
0

今日私の会社では古いプロジェクトを試しましたが、私は不思議に思っています。C#ダイナミックの値を比較する

if((dynamic)com_list.GetIntValue() != (dynamic)container.GetEnumValue()) 

例外はあなたがEnumInt32を比較することはできませんことを明確に示しています。問題の行は次のようになります。

でも、状況によってはこれまでにこれが機能していた可能性はありますか?

これ以上許可しないキーワードdynamicに変更はありますか?


ところで、彼はまた、このようなコードでこれを構築する:

if((dynamic)com_list.GetIntValue() != (dynamic)container.GetBooleanValue()) 

を私はまだ混乱している、なぜ誰かがproductivコードに比較のこの種を入れてしまうでしょう。

+3

本当に機能しましたか?実際にコードが実際に実行されたことは確かですか? –

+0

製品は出荷されていますが、コードのこの部分は使用されていません。そして、私は今本当に混乱しています。 – Smartis

答えて

1

No. dynamicの仕様は変更されていません。このような些細な比較のコンパイラでの評価は、1つのリリースで別のリリースに変更されていないことは間違いありません。ほとんどの場合、コードは機能しませんでした。

enumからint(またはその逆)のキャストを追加しないと、機能しません。

+0

ありがとうございます。しかし、私はまだ混乱しています。なぜ誰かがこの種のコードをproductivコードと比較するのでしょうか。 – Smartis

+0

良い質問です。なぜ著者に尋ねないのですか?おそらく忘れられている、テストされていないコードでしょう。 –

+0

動的にキャストする可能性が最も高いのは、コードをコンパイルするためだけです。それが実際にうまくいくかどうかについては著者は心配していませんでした。 – Evk