C# 和 F# 中的運算式
Managed 運算式評估工具可接受大部分以 C# 所撰寫的運算式。
不過,Managed 運算式評估工具無法辨識 F# 運算式。如果您在偵錯 F#,需將運算式轉譯為 C# 語法,才能在偵錯工具視窗或對話方塊中輸入運算式。將運算式從 F# 轉譯為 C# 時,請記住 C# 會使用 == 運算子來測試相等性,而 F# 則會使用單一 =。
下列章節提供特定的資訊,並討論一些不支援或僅部分支援的運算式類型:
Casts
Dynamic Objects
Identifiers and Types
Method Evaluation
Operators
Overloaded Operators
Property Evaluation
Strings
typeof and sizeof Operators
WebMethods
運算式評估工具會忽略存取 public, protected, internal 和 private 存取修飾詞。例如,您可以從 [監看式] 視窗呼叫 private 方法。由於運算式評估工具會忽略存取修飾詞,因此可能會叫用 (Invoke) 未預期的載入。
不論執行的程式碼為 safe 或 unsafe,運算式評估工具都會在隱含 unsafe 內容中執行所有評估。
運算式評估工具也會忽略檢查過的區塊和 /checked 編譯器選項。對於未檢查內容中的所有運算式都會加以評估。
對於自訂資料型別,您可以使用屬性 (Attribute) 來自訂其顯示。如需詳細資訊,請參閱顯示自訂資料型別。
轉換
簡單的轉換運算式可用在偵錯工具中:
(A)x
關於指標的轉換不適用於偵錯工具中。
動態物件
運算式評估工具可以評估以靜態方式設為動態型別的變數。它也可以評估實作 IDynamicObject 介面的物件。在 [監看式] 視窗中評估實作 IDynamicObject 介面的物件時,會加入 [動態檢視] 節點。[動態檢視] 節點會顯示物件成員,但不允許編輯成員的值。
不支援下列動態物件功能:
複合運算子 +=、-=、%=、/= 和 *=
許多轉型,包括數字轉型和型別引數轉型
具兩個以上引數的方法呼叫
Getter 屬性具有兩個以上的引數
具有引數的 Setter 屬性
指派給索引子
布林運算子 && 和 ||
識別項和型別
偵錯工具運算式可以使用任何在目前範圍 (Scope) 中可見的識別項。舉例來說,如果偵錯工具在 Magh 方法內中止,您就可以使用任何在 Magh 中可見的識別項,包括常數、變數名稱和方法名稱。
偵錯工具可以正確地顯示任何基本、列舉或內建 (Intrinsic) 型別的變數。對於類別型別的變數,偵錯工具會根據衍生最徹底的型別來正確地顯示該值。如果您有一個型別為 Lion 的物件 leo (衍生自 Cat 型別),您就可以評估 leo.Claws,並取得型別為 Lion 之物件的正確值。
您可以指定新數值給任何屬於左值 (L-value) 的左方運算式。這些包括基本、類別和 System.Object 型別。
方法評估
偵錯工具支援方法的評估,包括多載方法。因此,您可以輸入下列任一運算式,偵錯工具將呼叫多載方法的正確版本:
Time.Set();
Time.Set(atime);
在偵錯工具中評估方法實際上會呼叫並執行該方法的程式碼。如果方法會有副作用 (Side Effect),在偵錯工具視窗中評估該方法將會變更程式的狀態,這可能會產生無法預期的結果。
當您在多載方法上設定一個中斷點時,中斷點的位置會視您如何指定方法而定。如果指定完整簽章 (方法名稱和完整引數清單),偵錯工具會在指定的多載上設定一個中斷點。如果只指定了方法名稱,偵錯工具的行為就會取決於 Visual Studio 選項的設定。如果未核取 [使用 IntelliSense 驗證函式名稱] 核取方塊,偵錯工具將會在該方法名稱的每個多載上都設定一個中斷點。或者,[選擇中斷點] 對話方塊會開啟,讓您指定要在哪些多載上放置中斷點。如需詳細資訊,請參閱 HOW TO:設定函式中斷點。
這個 Visual Studio 版本中的偵錯工具並不支援建立新的匿名方法。
運算子
偵錯工具會正確地評估大部分的內建運算子,包括:
關係運算子以及等號比較運算子:( expr1> expr2、expr1< expr2、expr1<= expr2、expr1=> expr2、expr1== expr2、expr1!= expr2)。
布林值操作元:(expr1&& expr2、expr1|| expr2、expr1? expr2: expr3)。
Arithmetical operators: (expr1+ expr2,expr1- expr2, expr1* expr2, expr1/ expr2, expr1% expr2 ).
邏輯運算子:(expr1& expr2, expr1^ expr2, expr1| expr2 )。
移位運算子:(expr1>> expr2、expr1<< expr2 )。
Assignment operators: ( lvalue= expr2,lvalue*= expr2,lvalue/= expr2, lvalue%= expr2, lvalue+= expr2, lvalue-= expr2, lvalue<<= expr2, lvalue>>= expr2, lvalue&= expr2, lvalue^= expr2, lvalue|= expr2).
一元運算子:( +expr1、- expr1、expr1++, ++expr1、expr1--, --expr1)。
多載運算子
大部分的多載運算子 (Overload Operator) 都可用在偵錯工具中。
多載中置運算子 +、-、/、% 和 & 可以使用:
expr1+ expr2
expr1- expr2
expr1/ expr2
expr1% expr2
expr1& expr2
多載中置運算子 =、&&、& 和 || 不可使用:
expr1= expr2
expr1&& expr2
expr1& expr2
expr1|| expr2
如果兩個運算元都是類别變數,則不能使用多載中置運算子 << 和 >>:
object1 <<object2
object1>> object2
多載前置運算子 +、-、++、--、! 和 ~ 可使用:
+expr1
-expr1
++expr1
--expr1
!expr1
~expr1
多載後置運算子 ++ 和 -- 可使用:
expr1++
expr1--
多載索引子 (Indexer) 可以使用:
- expr1[expr2]
屬性評估
偵錯工具可評估任何變數視窗中的屬性。然而,在偵錯工具中評估屬性可能有副作用,產生未預期而且不想要的結果。若要防止意外評估所產生的副作用,您可以關閉 [選項] 對話方塊中的屬性評估。
字串
偵錯工具會辨識和字串及陣列一起使用的索引運算子。因此,您可以輸入下例:
"hello world"[0]
[監看式] 視窗將會顯示正確的值:
'h'
在 C# 中 (和原生 (Native) C/C++ 不一樣),您可以在偵錯工具中編輯字串的值。此外,您也可以在字串上使用 Length 運算子:
mystring.Length
-或-
"hello world".Length
在 C# 中,您可以串聯字串:
"hello" + "world"
typeof 和 sizeof 運算子
偵錯工具支援 typeof 和 sizeof 運算子,它會將那些運算子轉換成等同的 .NET Framework 函式。
typeof ( expression)
會轉換成:
System.Type.GetType( expression)
然後偵錯工具就會評估這個轉換的運算式。
偵錯工具支援 sizeof 運算子。
WebMethod
您不能從偵錯工具視窗中呼叫 WebMethod。