C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: Type型のインスタンスを利用してキャスト


(過去ログ 116 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■68319 / inTopicNo.1)  Type型のインスタンスを利用してキャスト
  
□投稿者/ sep (1回)-(2013/10/10(Thu) 15:31:50)

分類:[.NET 全般] 

Type型を使ってキャストすることはできないでしょうか?
型は実行時までわかりません

object a = 10;

Type type = typeof(int);

int b = a; // ←この行をtypeだけ使ってキャストしたいです。
// int b = Convert.ChangeType(a, type); などを使ってもダメでした。

よろしくおねがいいたします。
引用返信 編集キー/
■68320 / inTopicNo.2)  Re[1]: Type型のインスタンスを利用してキャスト
□投稿者/ WebSurfer (75回)-(2013/10/10(Thu) 15:40:56)
No68319 (sep さん) に返信
> Type型を使ってキャストすることはできないでしょうか?
> 型は実行時までわかりません
>
> object a = 10;
>
> Type type = typeof(int);
>
> int b = a; // ←この行をtypeだけ使ってキャストしたいです。
> // int b = Convert.ChangeType(a, type); などを使ってもダメでした。
>
> よろしくおねがいいたします。

回答ではありません。

質問する際は、どうしてそうしたいのか、何故そうする必要があるのか等の
詳細説明も書くと、より有益な回答が得られるかもしれませんので、できれ
ばそうすることをお勧めします。
引用返信 編集キー/
■68326 / inTopicNo.3)  Re[1]: Type型のインスタンスを利用してキャスト
□投稿者/ 魔界の仮面弁士 (370回)-(2013/10/10(Thu) 16:40:25)
2013/10/10(Thu) 16:56:40 編集(投稿者)

No68319 (sep さん) に返信
> Type type = typeof(int);
> int b = a; // ←この行をtypeだけ使ってキャストしたいです。

左辺が「int b」なのですから、変数 type の出番は無いですよね。
右辺は (int)a 一択だと思います。

左辺が object b や dynamic b であれば、変数 type を使う道も
生まれますが、そうするとキャストの意図が失われてしまいますし。


dynamic a = 10;

int b = -1;
Type typeInt = b.GetType();

if (typeInt.IsAssignableFrom(a.GetType()))
{ b = a; }

Console.WriteLine(b);


やりたいことは何なのか、何のためにその処理が必要なのか、
具体的な目的を示して頂いた方が、回答を付けやすいと思います。
引用返信 編集キー/
■68328 / inTopicNo.4)  Re[2]: Type型のインスタンスを利用してキャスト
□投稿者/ sep (2回)-(2013/10/10(Thu) 22:11:22)
No68326 (魔界の仮面弁士 さん) に返信


テキストデータから配列を復元するのが目的です。

texts.Select(t => typeConverter.ConvertFromString(t)).ToArray();
だと、object[]になってしまうので、Typeのインスタンスを利用して目的の配列が得られないかと思いました。

結局、System.Array.CopyTo()にTypeを渡すことで、object[]から目的の配列が得られました。
ありがとうございました。

引用返信 編集キー/
■68329 / inTopicNo.5)  Re[3]: Type型のインスタンスを利用してキャスト
□投稿者/ Azulean (225回)-(2013/10/10(Thu) 22:59:36)
「int[] で扱うような部分がどこかにあるのでは?」ということから回答者側から「なぜそれが必要なのか?」という疑問が出ていました。

今回、object a = new int[10]; のように自分で書く C# のコード上で int[] で扱う場所がないということなのでしょうか。
そうであれば、Type から復元したいというのにも納得がいきます。
逆に扱う場所があるのであれば、Type ではなく、ジェネリックを使うケースだと予想されます。
引用返信 編集キー/
■68330 / inTopicNo.6)  Re[4]: Type型のインスタンスを利用してキャスト
□投稿者/ sep (3回)-(2013/10/10(Thu) 23:51:15)
No68329 (Azulean さん) に返信

> 今回、object a = new int[10]; のように自分で書く C# のコード上で int[] で扱う場所がないということなのでしょう
ないです。
あるのは、型の名前と、文字列に変換されたデータだけです。

type=System.Drawing.Point
isArray=true
data=10, 20
data=10, 30
data=10, 40

以上のようなテキストデータから復元するプログラムです。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -