- - PR -
キャストについて
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-03-18 18:37
以下のコード中(コードは簡略化しています。)において@とAは可能でしょうか?
環境:VS2005(C#2.0)
やりたいことは、 格納される値にはint値やbool値やdouble値などが含まれるDictionary<string, object>のような辞書を定義し、 値格納フェーズにおいて、 items.Add("voltmeter", (double)1.23); とし、 値を取り出すときには、 items["voltmeter"]としたときに、これは何型なのかを知りたいということです。 以上、宜しくお願いします。 | ||||||||||||||||
|
投稿日時: 2008-03-18 18:45
あらかじめ型が絞れる(かつそれほど数がない)のであれば、
typeof で聞いてみるというのはどうでしょうか。 if ( typeof obj is int ) { int i = (int)obj; } else if ( typeof obj is double ) { double d = (double)obj; } | ||||||||||||||||
|
投稿日時: 2008-03-18 18:45
http://msdn2.microsoft.com/ja-jp/library/system.object.gettype(VS.80).aspx
| ||||||||||||||||
|
投稿日時: 2008-03-18 18:45
GetType とか TypeOf とか is とか as とか?
変数は作れないだろうなぁ?いや、あなたの思いと私の思いが一致しているかどうかわからないけど。 | ||||||||||||||||
|
投稿日時: 2008-03-18 21:53
int iやdouble dの変数を、if文スコープの外で定義したいのです。 つまり、objが示す型の変数をあらかじめ作っておきたいのです。
私がやりたいことのヒントが得られるかわかりませんが さしつかえがなければ、Jittaさんの思いというのを教えていただけませんでしょうか? | ||||||||||||||||
|
投稿日時: 2008-03-18 22:15
あ、いや、質問の意図と私の理解が一致しているか、ということです。
こんな感じ?
で、実際にどうするか、ですが、結局その型以外の変数は使わないのですから、if ブロック内にスコープを納めてもいいのでは? あるいは、実際の処理はもう一段別のメソッドをかまし、そのメソッドではオーバーロードを利用してそれぞれの型用の処理をする、とか。GoF のパターンにありそうだけど。 [ メッセージ編集済み 編集者: Jitta 編集日時 2008-03-18 22:16 ] | ||||||||||||||||
|
投稿日時: 2008-03-18 22:22
コンパイル時にわかることはそれがobject型であるということだけなので それ以上のことはできません。 isやらGetTypeは実行時なので無理です。 考えられる解決策はオブジェクト指向のポリモーフィズムです。 問題は取得してきた値に対してどのような操作をするかですが・・・。 | ||||||||||||||||
|
投稿日時: 2008-03-19 09:00
KeyDown イベントでは、押されたキーによって処理を行なったとき、 イベントデータの Handled に true をセットしますよね。 何かの処理を行うために型の特定を行いたいということでしたら、 それと同じ要領で 「指定されたオブジェクトの型が自分が処理対象とする型だったら処理を行う 処理を行った場合は処理済であることを意味するフラグを立てる」 ようなインスタンスなりデリゲートなりを持たせるというのはどうでしょう。 |
1