2017-04-05 21 views
0

デバッグ時にList<T>の値を検査しようとしましたが、をオーバーライドすると "子供を評価できませんでした"私はVS2017を使用してUnity3D 5.6.0fプロジェクトオーバーライドされたToString()を検査するときに "子どもを評価できませんでした"

サンプルコードのデバッグいます:

void Start() { 
    //if Sphere.ToString() is commented out, the contents are displayed correctly 
    var obstacles = parser.ParseFile(Variables.Paths.DefaultScene).ToList(); 
} 
//... 
[System.Diagnostics.DebuggerDisplay("{ToString()}")]//with or without this attribute 
public class Sphere 
{ 
    public Vector3 Center { get; set; } 
    public float Radius { get; set; } 

    public override string ToString() 
    { 
     return "[r: " + Radius + " c: " + Center + "]"; 
    } 
} 

Tは、クラスまたは構造体であるかどうかは、任意の効果を持っていないようだ、DebuggerDisplay属性も同様に効果がありません - リストはできません無関係に検査される。

var tmp = new Sphere(); 

しかしtmpToString()正しく表示されます。この問題をどうやって解決するのですか?

答えて

0

文書を簡単に見てみると、カスタムToString()またはDebuggerDisplayという属性を使用する必要があります。両方ではありません。特にDebuggerDisplayがちょうど{ToString()}呼び出しである場合。ここで

は、この問題に言及している文書の段落です:

クラスはオーバーライドされたToStringメソッド()メソッドを持っている場合、デバッガは代わりにデフォルトの{}の オーバーライドされたメソッドを使用しています。したがって、 がToString()メソッドをオーバーライドした場合、デバッガはデフォルトの{}ではなく オーバーライドされたメソッドを使用し、 ではDebuggerDisplayを使用する必要がありません。両方を使用する場合は、DebuggerDisplay 属性がオーバーライドされたToString()メソッドよりも優先されます。

出典:Using the DebuggerDisplay Attribute

+0

'DebuggerDisplay'はとても今までにどのような影響を与えないの質問有無で述べたように。 「子どもは評価できませんでした」は、リストを検査しようとすると常に生成されます。 – wondra

+0

ToString()を削除しようとしましたが、これをヘッダーに追加しましたか? '[System.Diagnostics.DebuggerDisplay(" [r:{Radius} c:{Center}] ")]' –

関連する問題