无法使用实例引用</method>访问成员“<method>”

时间:2011-09-16 22:30:11

标签: c# instance

整个错误文本是:

  

无法使用实例引用访问成员'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;
}

2 个答案:

答案 0 :(得分:5)

问题在于使用方法Replace而不是在声明中使用static。您需要使用类型名Regex而不是变量r

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

原因在于C#,您无法通过该类型的实例访问static方法。此处Replacestatic,因此必须通过类型Regex

使用

答案 1 :(得分:2)

好的,首先; default(Regex)只会返回null,因为Regex是引用类型。因此,即使您的代码已经编译,它也肯定会在此行中因NullReferenceException而崩溃,因为您从未将任何有效内容分配给r

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

接下来,编译器正在告诉你究竟是什么问题; Replace是静态方法,而不是实例方法,因此您需要使用typename而不是实例变量。

DirtyString = Regex.Replace(...);