2011-09-02 2 views
3

C#에서 문자열 데이터 형식을 확장하는 메서드를 만들었습니다.이 메서드는 텍스트 한정자를 정의 할 수 있도록 Split 함수에 과부하를 추가합니다. 문자열 데이터는 "필드 2"확장 메서드를 통한 디버그

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

연장 잘 작동 "3 일 출원," "필드 1"로 정의된다. 네임 스페이스를 참조하고 사용하면 메서드에 액세스 할 수 있습니다. 그러나 디버깅하려는 메서드에 문제가 있지만 디버거가 확장 메서드로 들어 가지 않습니다.

확장 코드

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 메서드와 마찬가지로 디버거가 단계를 건너 뜁니다.

어떤 아이디어 ??

답변

6

사실, testString.Split(',','"')을 호출 할 때 이 실제로 호출되면은 확장 메서드가 아니고 public string[] Split(params char[] separator) 오버로드입니다. 적용 가능한 경우 인스턴스 멤버 이 항상이 확장 메서드보다 우선하기 때문입니다.

당신이 할 수있는 유일한 두 가지 방법은 당신의 방법이나 서명을 어떻게 든 변경하여 다양한 String.Split 오버로드와 다릅니다.

+0

감사합니다. 그게 문제였습니다. SplitWithQualifier 메서드의 이름을 변경 했으므로 디버깅이 올바르게 작동합니다. 감사. – KevinManx

0

확장 방법에 중단 점을 넣을 수 있습니다. 실행은 거기에서 멈출 것이다.

적절하고 사용 가능한 다른 방법이 있어야합니다.
아직 찾지 못했습니다.

+0

로 중단 점을 보여줍니다은 다음과 시도해야한다 "중단 점을 현재 히트되지 않습니다. 어떤 기호는이 문서에 대해로드되지 않았습니다." 프로젝트가 디버그로 설정되어 있고 디버그 기호를 빌드하지 않도록 명시 적으로 설정하지 않았습니다. – KevinManx

+0

메쏘드가 실제로 호출 되었다면 * (개인적 경험) * 멈출 것입니다. 답변으로 표시된 @Anton Gogolev의 대답을 참조하십시오. – ANeves

0

F12 (def로 이동)를 누르거나 Reflector 출력을보고 코드를 호출 할 수 있는지 확인할 수 있습니다. VS2010 디버거에서이 작업을 수행하는 방법에 대한 링크 된 질문을했습니다.

2

그것은 StringExtension.Split(...);처럼 전화 또는

enter image description here

+0

그것은 이미 unticked입니다. – KevinManx

+1

그러면 정적 메서드를 호출하는 방법이 잘못되었을 수 있습니다. – CharithJ