- - PR -
C#2.0で暗黙の変換を禁止したい。
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-20 16:51
お世話になります、暗黙の変換を禁止させたいのですが、
C#で暗黙の変換の禁止は可能なのでしょうか? public partial class Form1 : Form { public enum hoge { aa = 0, bb = 1, cc = 2 } public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { hoge aaa = hoge.aa; if (aaa == 0) { MessageBox.Show("333"); } } } 上記プログラムで、 (aaa == 0)の部分なのですが、 これでコンパイルが通ると、列挙体を使う意味が半減され、非常に困っています。 VB.netには禁止するスイッチがあるみたいですが。。。 しばらくwebサイトをさまよいましたが、分かりませんでした。 | ||||||||
|
投稿日時: 2009-02-20 17:24
拡大変換は無条件で通ります。
http://msdn.microsoft.com/ja-jp/library/k1e94s7e.aspx > VB.netには禁止するスイッチがあるみたいですが。。。 どのスイッチでしょうか? | ||||||||
|
投稿日時: 2009-02-20 17:27
Option Strict =[ON | OFF]
です。 もしかして、列挙体の暗黙の変換には使えないのでしょうか? C#ではないので、試していないのですが。。。 | ||||||||
|
投稿日時: 2009-02-20 17:34
すみません。
リンク先見ましたか? Option Strict =[ON | OFF] で制御しようと拡大変換は通ります。 縮小変換は通りません。 | ||||||||
|
投稿日時: 2009-02-20 17:41
改めて確認しました。
おっしゃられているよう拡大変換ではダメみたいですね。 しか、比較の部分を以下のように、 0以外にするとコンパイルでエラーになってくれるのが、 なんか解せないのですが。。。。 if (aaa == 2) | ||||||||
|
投稿日時: 2009-02-20 17:52
列挙型の変数をコンストラクタで初期化すると規定で 0 で初期化されますので、0 は必要なんじゃないですかね?
あと、↓こういうことをしたい場合もあるし。
[ メッセージ編集済み 編集者: rain 編集日時 2009-02-20 17:58 ] | ||||||||
|
投稿日時: 2009-02-20 17:57
暗黙の拡大変換が解せないとなると
this.Controls.Add(this.button1); double d = 1; string s = string.Format("{0}", "aaa"); などが全て解せない事になりますが・・・。 | ||||||||
|
投稿日時: 2009-02-20 18:18
rain様。
初期化の件了解しました。 仕様だとしょうがないですね。 使い方はなるほどですが、仕様としては個人的にはすっきりしないですが。。。 (enumに0を登録しないと、初期化状態の検査が面倒なくらいの方が個人的には好みですが。) King様。 ありがとうございました。 |
1