- - PR -
配列のキャストについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-29 13:16
いつもお世話になっております。
インターフェースAを継承する構造体Bの配列をA配列にキャストして、A配列を引数に持つメソッドの呼び出しを行う処理を考えています。 B[]をA[]にキャストしたいのですが、コンパイルエラーとなります。 メソッド内では、引数の値を変更しています。 以下の実現したいコードを簡略化して添付します。
どのようにすれば、配列のキャストが出来るのでしょうか? ご教授よろしくお願いします。 | ||||||||||||
|
投稿日時: 2005-09-29 13:24
こんにちは、じゃんぬ です。
配列を丸ごとキャストするのではなく、要素をひとつずつキャストして、 新しいインスタンスに追加していくことになります。 .NET Framework 的には CopyTo メソッドだとか、そういったメソッドを用意すると楽ですね。 # s/ご教授/ご教示 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-09-29 13:39
ちなみにCLRでは
参照型の要素(class)を持つ配列はキャストすることができますが 値型の要素(struct)を持つ配列はキャストすることができません。 今回の場合はstructなのでキャストできないわけです。 | ||||||||||||
|
投稿日時: 2005-09-29 13:53
こんにちは。
こんなのどうですか?(じゃんぬねっとさんの方法の方が良いかな?) また、上記のようにやっても、新しい配列ができているので、提示したメソッドにそのままコピーしても意図した通りにはならないでしょう。 #編集 ちなみに、今回のように、引数の配列の値を変えたい?という意図では、メソッドに ref はいりません。 [ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-29 13:56 ] [ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-29 13:57 ] | ||||||||||||
|
投稿日時: 2005-09-29 13:54
じゃんぬねっとさん、burton999さん、囚人さん、レス有難う御座います。
確かに、先ほど調べた本には
このことが書かれていました。構造体(struct)が値型で有ることをすっかり忘れておりました。 皆さんの意見から二つの方法で回避できましたが、どちらが最適だとお考えでしょうか? @Method1の処理を以下に変更
A構造体Bをクラスに変更する。
お恥ずかしい… [ メッセージ編集済み 編集者: さな 編集日時 2005-09-29 13:55 ] [ メッセージ編集済み 編集者: さな 編集日時 2005-09-29 13:56 ] [ メッセージ編集済み 編集者: さな 編集日時 2005-09-29 13:58 ] | ||||||||||||
|
投稿日時: 2005-09-29 14:08
これは、なぜclassではなくstructで設計したのかに依存するので、なんとも言えません。 値型の使用法のガイドライン http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconvaluetypeusageguidelines.asp |
1