String.Remove在静态方法中等效

时间:2010-08-25 14:53:26

标签: c#

你不能在静态方法中使用string.Remove,因为Remove是一个实例方法。那么除了正则表达式之外还有什么替代方法可以删除字符串中的特定字符?我要做的是删除我所拥有的长字符串中的任何反斜杠。所以“\”例如在我正在评估的字符串中。

示例:

public static FacebookSession CreateNewSessionFromCookie(HttpCookie facebookAuthCookie)
{
    ..some logic
    String.Remove(facebookAuthCookie["\"access_token"].Length-1, 1);
    ...rest of the code

我在Remove方法中遇到“无法访问非静态方法在静态上下文中删除”的错误

所以上面我尝试删除cookie值中的最后一个“\”。理想情况下,我想删除该字符串中的所有“\”实例,但由于该complile错误,我无法进行测试。

4 个答案:

答案 0 :(得分:3)

嗯,我想你可能会想到这个错误。你可以在你编写的任何方法中使用String.Remove,静态与否,但String.Remove是字符串的实例方法。你会这样称呼它:

string foo = "abc";
foo = foo.Replace("b", "z"); // not String.Replace(...)

答案 1 :(得分:2)

我假设您正在尝试在具有实例字符串变量的类上实现静态方法:

// This will not compile!
public class SomeClass
{
    string _someMember;

    public static string RemoveFromString()
    {
        int start, end;            

        // Some logic to figure out where to start and end

        return _someMember.Remove(start, end);
    }
}

在这种情况下,解决方案很容易。要么使静态方法接受一个字符串参数,该参数是您要修改的字符串,要么使该字符串成为静态变量:

public class SomeClass
{
    string _someMember;

    public static string RemoveFromString(string original)
    {
        int start, end;            

        // Some logic to figure out where to start and end

        return original.Remove(start, end);
    }
}

答案 2 :(得分:0)

在编译之后,我认为你可以在静态类/方法中使用String.Remove:

        public static void Test()
        {
           string Bla = "Hello, Guys";
           Bla = Bla.Remove(2, 1);
        }

您唯一需要的是String的实例。

答案 3 :(得分:0)

你得到的错误不是因为你的方法是静态的,而是因为Remove不是String类的静态方法。您必须在字符串实例上调用它。

所以,在你的情况下:

public static FacebookSession CreateNewSessionFromCookie(HttpCookie facebookAuthCookie)
{
    //..some logic
    string token = facebookAuthCookie["access_token"];
    token = token.Remove(token.Length-1, 1);
    //...rest of the code
}

删除“\”的所有实例:

public static FacebookSession CreateNewSessionFromCookie(HttpCookie facebookAuthCookie)
{
    //..some logic
    string token = facebookAuthCookie["access_token"];
    token = token.Replace(@"\", string.Empty);
    //...rest of the code
}