人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C# で動的にキャストすることはできるのでしょうか?

やりたいことは、たとえば、A から Z という名前をもったクラスがあるとして、あるオブジェクト object に対して、

(A)object
(B)object
:
(Z)object

とそれぞれのクラスでキャストが可能とします。

これを順次キャストしていくのに、

string [] classes = { "A", ... "Z"}

のようなクラス名を持った配列を用意し、これを

for (int i=0; i <classes.length; i++)
{
classes[i] で object をキャストする
}

のようにぐるぐる回したいのですが、クラス名を変数としてキャストする方法、つまり上記の文章部分を実現したいのですが、可能なのでしょうか?

●質問者: jishiha
●カテゴリ:コンピュータ
✍キーワード: Class C# object String オブジェクト
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ke-k
●100ポイント ベストアンサー

キャストした後に何がしたいか、により答えが変わってくるかとは思いますが…

単にキャスト演算子を呼び出したい、もしくはダックタイピングのようなことでしたら可能だと思います。

Type t = Type.GetType(classes[i]);

で、文字列に対応するSystem.Typeオブジェクトが得られます。

与える文字列は名前空間を含むクラスのフルネームです。

(例えば"int"などではなく"System.Int32"でなくてはだめです)


これを使えば、

Convert.ChangeType(object, t);

でキャスト演算子を呼び出せるはずです。ただし、戻り値の型はSystem.Objectです。

http://www.thescripts.com/forum/thread436109.html


キャストそのものよりもある名前のメソッドを呼び出したいのであれば、

MethodInfo mi = t.GetMethod("Foo");

でメソッドを取得し、

Object[] paramlist = { param1, param2, ... }; // メソッドの引数の配列
mi.Invoke(object, paramlist); 

で呼び出せます。

プロパティの場合は GetProperty して、 GetValue, SetValue です。

http://www.atmarkit.co.jp/fdotnet/dotnettips/359callbyname/callb...

◎質問者からの返答

意図を組んでくださり、的確な回答いただきありがとうございます。

プロパティに動的にアクセスするのが本来の目的で、GetProperty を使うことで解決しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ