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

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

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

デバッグモードでStructureの中身を表示する方法

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

■92051 / inTopicNo.1)  デバッグモードでStructureの中身を表示する方法
  
□投稿者/ 独歩 (1回)-(2019/08/21(Wed) 13:53:05)

分類:[.NET 全般] 

        Dim bbb(5) As PointF


というPointFの配列を定義すると、
デバッグモード中のローカルパネルで
{X = 128 Y = 256}
{X = 128 Y = 256}
{X = 128 Y = 256}
{X = 128 Y = 256}
{X = 128 Y = 256}
{X = 128 Y = 256}

というように中身を確認することができます。


一方で、自分で以下のようなカスタムStructureを作成した場合には、

    Public Structure PointFadd2
        Property X As Single
        Property Y As Single
    End Structure

        Dim aaa(5) As PointFadd2

以下のようになってしまい、上の階層から中身を見ることができません。

{WindowsApplication1.Module1.PointFadd2}
{WindowsApplication1.Module1.PointFadd2}
{WindowsApplication1.Module1.PointFadd2}
{WindowsApplication1.Module1.PointFadd2}
{WindowsApplication1.Module1.PointFadd2}
{WindowsApplication1.Module1.PointFadd2}

そのため、中身を確認するには一つ一つ、左端の三角ボタンを押して
開いていく必要があります。

カスタムStructureであってもPointFのように
階層を開かずに確認できるようにしたいのですが
どのようにすれば良いですか?



あと、PointFにPropertyを追加したStructureを作成したいのですが


    Public Structure PointFadd3
        Inherits PointF
        Property X2 As Single
    End Structure

のようにして、Structureは継承できないと言われてしまいます。
クラスしか継承はできないものなのでしょうか?


引用返信 編集キー/
■92052 / inTopicNo.2)  Re[1]: デバッグモードでStructureの中身を表示する方法
□投稿者/ Hongliang (870回)-(2019/08/21(Wed) 14:15:36)
> カスタムStructureであってもPointFのように
> 階層を開かずに確認できるようにしたいのですが
> どのようにすれば良いですか?

二通りの解決方法があります。

一つは、ToStringメソッドをoverridesする方法です。この場合、Debug.Print(point)などとやったときもにもそのように表示されるようになります。

もう一つは、以下のような記述を行うことです。
<System.Diagnostics.DebuggerDisplay("x={X}, y={Y}")> _
Structure PointFadd2
' 以下略
こちらの方法では、デバッガでのみ指定したように表示され、Debug.Printなどには影響しません。

ちなみに上記の両方とも、構造体だけでなくクラスでも使用できます。


> クラスしか継承はできないものなのでしょうか?

はい。
引用返信 編集キー/
■92053 / inTopicNo.3)  Re[2]: デバッグモードでStructureの中身を表示する方法
□投稿者/ 独歩 (2回)-(2019/08/21(Wed) 16:10:17)
ありがとうございます。

二つ目の方法でうまくいきました。

一つ目の
ToStringメソッドをoverridesする方法というのはどのようにすれば良いですか?
一つ目の方法だと
2つめの方法とは異なり、フォーマットを指定できないように思いますが
どうでしょうか?

引用返信 編集キー/
■92054 / inTopicNo.4)  Re[3]: デバッグモードでStructureの中身を表示する方法
□投稿者/ Hongliang (871回)-(2019/08/21(Wed) 16:15:56)
> ToStringメソッドをoverridesする方法というのはどのようにすれば良いですか?
> 一つ目の方法だと
> 2つめの方法とは異なり、フォーマットを指定できないように思いますが
> どうでしょうか?

何を返すのかは実装次第ですが?
Structure PointFadd2
  ' 略
  Public Overrides Function ToString() As String
    Return String.Format("({0}, {1})", Me.X, Me.Y)
  End Function
End Structure

引用返信 編集キー/
■92055 / inTopicNo.5)  Re[4]: デバッグモードでStructureの中身を表示する方法
□投稿者/ 独歩 (3回)-(2019/08/21(Wed) 17:13:45)
ありがとうございます。

そのようなことができるのですね
素晴らしいです。

ちなみに、これって既存のものを置き換えることってできますか?

2次元配列を

Dim aaa(128, 64) As Single

と宣言した場合で、
{Lenght = 8385}
と表示されるのですが、
128と64が表示されるようにしたいのですが、
これって自分でカスタムのStructureかClassを作り
その中のPropertyに配列を入れるのならできると思いますが
配列のみを宣言した場合、
このようなそれぞれの次元の要素数を表示することってできますでしょうか?



引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ