2011-09-02 72 views
3

我在C#中創建了一個擴展字符串數據類型的方法,爲Split函數創建了一個額外的重載,以便可以定義文本限定符。 實施例 字符串數據定義爲 「字段1」, 「區域2」, 「3日提交的」通過擴展方法調試

string[] splitData = data.Split(',','"') 

擴展工作正常。一旦引用和使用名稱空間,我就可以訪問該方法。但是,在我試圖調試的方法中存在一個問題,但調試器不會進入擴展方法。

擴展代碼

namespace Extensions 
{ 
    public static class StringExtension 
    { 
    public static string[] Split(this string s, char delimiter, char qualifier) 
    { 
     // Method does work 
    } 
    } 
} 

代碼在NUnit測試

string testString = "\"Field 1\",\"Field 2\",\"Field 3\""; 
int expectedCount = 3; 

// Do Test. 
string[] result = testString.Split(',','"'); 

Assert.AreEqual(expectedCount, result.Length); 

我不能踏進testString.Split(」 '''「),它返回一個結果和intellisense顯示的是擴展方法,調試器只是跨過它,就像內置分割方法一樣。任何想法?

回答

6

事實上,當你調用testString.Split(',','"')什麼實際上被調用的是一個public string[] Split(params char[] separator)重載,而不是你的擴展方法。這是因爲實例成員(如果適用)總是優先於擴展方法。

您可以做的唯一兩件事是重命名您的方法或以某種方式更改簽名,因此它與各種String.Split重載不同。

+0

謝謝,這是問題所在。我重命名了方法SplitWithQualifier,現在調試工作正常。謝謝。 – KevinManx

0

您可以在擴展方法中放置一個斷點;執行將停止在那裏。

雖然必須有另一種方式,一個是適當的和可用的。
我還沒有找到。

+0

斷點顯示爲 「斷點目前不會被擊中,無符號已加載這個文件。」 該項目設置爲調試,我沒有明確地設置它不建立調試符號。 – KevinManx

+0

這將* *停止(個人經驗),如果實際上被調用的方法 - 指的是被標記爲答案@Anton Gogolev的答案。 – ANeves

0

可以通過按F12(轉到def)或查看反射器輸出來驗證要調用的代碼。我已經問過關於如何在VS2010調試器中執行此操作的鏈接問題。

2

應該叫像StringExtension.Split(...);或者試試下面

enter image description here

+0

這已經沒有問題。 – KevinManx

+1

那麼你可能調用靜態方法的方式是錯誤的。 – CharithJ