通过扩展方法调试
问题描述:
我在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显示的是扩展方法,调试器只是跨过它,就像内置分割方法一样。任何想法?
答
事实上,当你调用testString.Split(',','"')
什么实际上被调用的是一个public string[] Split(params char[] separator)
重载,而不是你的扩展方法。这是因为实例成员(如果适用)总是优先于扩展方法。
您可以做的唯一两件事是重命名您的方法或以某种方式更改签名,因此它与各种String.Split
重载不同。
答
可以通过按F12(转到def)或查看反射器输出来验证要调用的代码。我已经问过关于如何在VS2010调试器中执行此操作的链接问题。
谢谢,这是问题所在。我重命名了方法SplitWithQualifier,现在调试工作正常。谢谢。 – KevinManx