2009-06-26 76 views
15

オブジェクトがあります。ウォッチウィンドウから関数出力を何度も見なければなりません。 問題は、「この式は副作用を引き起こし、評価されないため」という手順のたびにリフレッシュボタンを押す必要があることです。 関数に[DoesNotCauseSideEffects]のようなタグを付ける方法はありますか?それで、私はステップを実行するたびに自動的に評価することができますか?Visual Studio:関数が "副作用"を引き起こさないことをデバッガに認識させる

私はVS2008のC#のコード化していたり​​、2010年

編集:あなたは任意の副作用を引き起こすことなく、見ることができるよう 関数は、次のようになりますとし(X、Y、Zが全てですダブルス)

public override string ToString() 
{ 
    return "{ " + x.ToString(".00") + ", " + y.ToString(".00") + ", " + z.ToString(".00") + "}"; 
} 
+0

おそらく、あなたが式や抜粋の抜粋を含むと、それがなぜそれを考えるのかが分かります。 –

答えて

3

いいえ、これはできません。関数に副作用があるかどうかの判断は、実際には言語固有の式評価プログラムによって行われます。

C#とVB.Netにはそれぞれ異なるEEがあり、それぞれが機能していない場合に副作用が発生するかどうかは独自の判断で判断できます。しかし、一般的には、両方とも副作用を持つ明示的な関数呼び出しを考慮しており、デバッガが副作用を無効にしたい場合のような状況では処理しません。

これを回避する最も簡単な方法は、プロパティを使用することです。デフォルトでは、Propertyインスタンスは副作用があるとみなされず、ステップで評価されます。

EDITは、いくつかの誤解を解消したかったです。関数に副作用があるかどうかを判断するには、デバッガまたは式評価プログラムのいずれのメソッド検査も行いません。彼らは単に機能の存在に気づき、潜在的に副作用があるとラベル付けします。彼らは決してメソッドのコードを検査しようとしません。

+1

この回答は、**完全に間違った**と思われます。以下の答えをチェックしてください。ウォッチ式に '、ac'を追加すると、自動的にデバッガに再評価されます。 – Jez

+0

@Jezは普遍的ではありません。それはC#では動作しますが、VB.Netでは動作しません。 – JaredPar

+4

VBを使用しないより多くの理由があります。NET ;-) – Jez

-2

関数がクラスプロパティまたはグローバル変数を変更しないようにしましたか?私の「副作用」の定義は、「関数の実行中に実行環境が変更される」ことです。

void addValues(int operand1, int operand2) { 
    globalSum = operand1 + operand2; 
} 

が、この機能はしていません::だからこの関数は副作用を引き起こす

int addValues(int operand1, int operand2) { 
    return operand1 + operand2; 
} 

それは可能な限り副作用を避けるために、常に良いでしょう。デバッグに問題が生じる可能性があります。 this wikipedia articleを参照してください。

+0

これは動作しません。 EEは、何らかの形で機能を検査しようとせず、単にプロパティではなく、潜在的に副作用があるとラベル付けします。 – JaredPar

19

あなたはそれが自動的に値を更新するために持っているウォッチ式に,acを追加することができます。

x.ToString(),ac 

は、より多くの情報や他のformat specifiersについては、MSDNを参照してください。

関連する問題