2011-09-16 6 views
3

참조 인스턴스에 액세스 할 수 없습니다 :회원 '<method>은'전체 오류 텍스트가

회원 'System.Text.RegularExpressions.Regex.Replace(string, string, string, System.Text.RegularExpressions.RegexOptions)' 인스턴스를 참조하여 액세스 할 수 없습니다; 대신 형식 이름을 사용하십시오.

다음은 코드입니다. 여기에 다른 게시물 에서처럼 "정적"을 제거했지만 여전히 오류가 발생합니다.

여기에있는 모든 전문가의 도움에 감사드립니다. - 감사합니다.

public string cleanText(string DirtyString, string Mappath) 
{ 
    ArrayList BadWordList = new ArrayList(); 
    BadWordList = BadWordBuilder(BadWordList, Mappath); 

    Regex r = default(Regex); 
    string element = null; 
    string output = null; 

    foreach (string element_loopVariable in BadWordList) 
    { 
     element = element_loopVariable; 
     //r = New Regex("\b" & element) 
     DirtyString = r.Replace(DirtyString, "\\b" + element, "*****", RegexOptions.IgnoreCase); 
    } 

    return DirtyString; 
} 
+0

읽기 : [외설 필터 : 나쁜 생각을 Intercoursing 나쁜 아이디어, 또는 믿을 수 없을만큼 (http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly -intercoursing-bad-idea.html),이 웹 사이트를 만든 사람이 썼습니다. – NullUserException

+1

'Regex r = default (Regex);는 코드에서 무엇을하고 있습니까? – BoltClock

답변

5

문제는 아닌 선언에 정적의 사용과 방법 Replace의 사용이다. 당신은 변수 r

DirtyString = Regex.Replace(DirtyString, "\\b" + element, "*****", RegexOptions.IgnoreCase); 

당신은 유형의 인스턴스를 통해 static 방법에 액세스 할 수 없습니다 C#에서 왜 이유 대신 유형 이름 Regex를 사용해야합니다. 여기서 Replacestatic이므로 유형을 통해 사용해야합니다. Regex

2

좋습니다. default(Regex)은 참조 유형으로 Regex이므로 null을 반환합니다. 따라서 코드를 컴파일하더라도 r에 아무 것도 할당하지 않으면이 행의 코드는 NullReferenceException과 충돌합니다.

DirtyString = r.Replace(DirtyString, "\\b" + element, "*****", RegexOptions.IgnoreCase); 

다음으로 컴파일러는 문제가 무엇인지 정확하게 알려줍니다. Replace은 정적 메서드이며 인스턴스 메서드가 아니므로 인스턴스 변수와 반대로 typename을 사용해야합니다.

DirtyString = Regex.Replace(...);