整个错误文本是:
无法使用实例引用访问成员
'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 :(得分:5)
问题在于使用方法Replace
而不是在声明中使用static。您需要使用类型名Regex
而不是变量r
DirtyString = Regex.Replace(DirtyString, "\\b" + element, "*****", RegexOptions.IgnoreCase);
原因在于C#,您无法通过该类型的实例访问static
方法。此处Replace
为static
,因此必须通过类型Regex
答案 1 :(得分:2)
好的,首先; default(Regex)
只会返回null,因为Regex
是引用类型。因此,即使您的代码已经编译,它也肯定会在此行中因NullReferenceException
而崩溃,因为您从未将任何有效内容分配给r
。
DirtyString = r.Replace(DirtyString, "\\b" + element, "*****", RegexOptions.IgnoreCase);
接下来,编译器正在告诉你究竟是什么问题; Replace
是静态方法,而不是实例方法,因此您需要使用typename而不是实例变量。
DirtyString = Regex.Replace(...);