2011-09-02 69 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