C# 通过扩展方法进行调试
我在C#中创建了一个扩展字符串数据类型的方法,为Split函数创建了额外的重载,以便可以定义文本限定符。 示例 字符串数据定义为“字段1”、“字段2”、“字段3” 扩展工作正常。一旦引用并使用名称空间,我就可以访问该方法。但是,我尝试调试的方法中有一个问题,但是调试器不会进入扩展方法 分机代码C# 通过扩展方法进行调试,c#,debugging,extension-methods,visual-studio-debugging,C#,Debugging,Extension Methods,Visual Studio Debugging,我在C#中创建了一个扩展字符串数据类型的方法,为Split函数创建了额外的重载,以便可以定义文本限定符。 示例 字符串数据定义为“字段1”、“字段2”、“字段3” 扩展工作正常。一旦引用并使用名称空间,我就可以访问该方法。但是,我尝试调试的方法中有一个问题,但是调试器不会进入扩展方法 分机代码 namespace Extensions { public static class StringExtension { public static string[] Split(this
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显示扩展方法。调试器只需单步执行,就像内置Split方法一样
有什么想法吗?您可以在扩展方法中设置一个断点;执行将在此停止 但必须有另一种方法,一种合适且可用的方法。
我还没有找到它。事实上,当您调用
testString.Split(',','““)
时,实际调用的是public string[]Split(params char[]separator)
重载,而不是扩展方法。这是因为实例成员(如果适用)总是优先于扩展方法
您唯一可以做的两件事是重命名方法或以某种方式更改签名,使其不同于各种
字符串。拆分重载。可以通过按F12(转到def)或查看反射器输出来验证要调用的代码。我问了一个关于如何在VS2010调试器中执行此操作的链接问题。它应该像StringExtension.Split(…)一样调用代码>或在下面尝试
断点显示为“当前不会命中断点。没有为此文档加载任何符号”。项目设置为调试,我没有明确设置为不生成调试符号。它将停止(个人体验)如果实际调用了该方法,请参考@Anton Gogolev的答案,该答案被标记为答案。谢谢,这就是问题所在。我重命名了方法SplitWithQualifier,现在调试工作正常。谢谢。那么您调用静态方法的方式可能是错误的。
string testString = "\"Field 1\",\"Field 2\",\"Field 3\"";
int expectedCount = 3;
// Do Test.
string[] result = testString.Split(',','"');
Assert.AreEqual(expectedCount, result.Length);