- PR -

C#におけるオブジェクトインスタンスのダンプ

1
投稿者投稿内容
わん
会議室デビュー日: 2007/02/11
投稿数: 9
投稿日時: 2008-04-09 16:58
こんにちわ。
SE3年目のわんです。

以下に質問を記載します。
どなたか有識者にアドバイスをいただければ幸いです。

【実現したい事】
C#でオブジェクトインスタンスのダンプをしたい。
→vsのクイックウォッチみたいな事をしたいわけです。

【前提条件】
・インスタンスのメンバを全て、ソースに書くようなことはしない。
・型名、実値の両方が確認できる。
・ツールなどへの画面表示、ファイル出力など視覚的に分かるようにしたい。

【知りたいこと】
@C#で実現可能なのでしょうか?
A実現可能なのであれば、その手段を教えていただきたいです。


以上です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-09 17:23
引用:

わんさんの書き込み (2008-04-09 16:58) より:

C#でオブジェクトインスタンスのダンプをしたい。
→vsのクイックウォッチみたいな事をしたいわけです。


有識者ではありませんが、リフレクションを使えばあるインスタンスが持っているメンバの値と名前を取得することができます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-04-09 17:25
可能です。
対象オブジェクトの GetType メソッドにて型情報を取得し、
リフレクションを使用します。
以下、コード例です。

コード:
static void Main(string[] args)
{
    object target = "hoge";
    Type targetType = target.GetType();
    BindingFlags allMemberBindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
    FieldInfo[] targetFields = targetType.GetFields(allMemberBindingFlags);
    foreach (FieldInfo field in targetFields)
    {
        Console.WriteLine("Name : {0}, Value : {1}", field.Name, field.GetValue(target));
    }
    Console.ReadLine();
}


_________________
C#と諸々
お だ
会議室デビュー日: 2008/04/02
投稿数: 14
投稿日時: 2008-04-09 17:25
引用:

・インスタンスのメンバを全て、ソースに書くようなことはしない。
・型名、実値の両方が確認できる。


System.Reflection 名前空間のクラスで実現可能です。
出力に関しては、何に出力するのかで色々と方法があると思いますよ。
わん
会議室デビュー日: 2007/02/11
投稿数: 9
投稿日時: 2008-04-09 18:01
各位

返答およびアドバイス有難うございます。
とても参考になります。

少し前提条件に記載し忘れた観点がありましたので、追記します。

【前提条件】
オブジェクトインスタンス内のメンバのメンバも参照する。
もちろんメンバのメンバのメンバも。
(つまり階層的・再帰的に実値型に当たるまで参照する。
これだと参照ループにはまりそうなので、終了判定は必要かもしれませんが。)


System.Reflectionでインスタンスの中身を全て見ることは可能でしょうか?
わん
会議室デビュー日: 2007/02/11
投稿数: 9
投稿日時: 2008-04-09 18:01
各位

返答およびアドバイス有難うございます。
とても参考になります。

少し前提条件に記載し忘れた観点がありましたので、追記します。

【前提条件】
オブジェクトインスタンス内のメンバのメンバも参照する。
もちろんメンバのメンバのメンバも。
(つまり階層的・再帰的に実値型に当たるまで参照する。
これだと参照ループにはまりそうなので、終了判定は必要かもしれませんが。)


System.Reflectionでインスタンスの中身を全て見ることは可能でしょうか?
わん
会議室デビュー日: 2007/02/11
投稿数: 9
投稿日時: 2008-04-09 18:01
各位

返答およびアドバイス有難うございます。
とても参考になります。

少し前提条件に記載し忘れた観点がありましたので、追記します。

【前提条件】
オブジェクトインスタンス内のメンバのメンバも参照する。
もちろんメンバのメンバのメンバも。
(つまり階層的・再帰的に実値型に当たるまで参照する。
これだと参照ループにはまりそうなので、終了判定は必要かもしれませんが。)


System.Reflectionでインスタンスの中身を全て見ることは可能でしょうか?
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-04-09 21:31
こんな感じのコントロール(PropertyGrid)もあるので
使用されてはどうでしょうか?
http://www.atmarkit.co.jp/fdotnet/dotnettips/285propertygrid/propertygrid.html

[ メッセージ編集済み 編集者: indigo-x 編集日時 2008-04-09 21:32 ]
1

スキルアップ/キャリアアップ(JOB@IT)