无法反转stringbuilder结果

时间:2017-12-22 15:28:50

标签: c#

我试图反转并返回一个StringBuilder结果但是我按以下public static string Reverse( string s ) { char[] charArray = s.ToCharArray(); Array.Reverse( charArray ); return new string( charArray ); } 的顺序尝试所有变体时出现以下错误:

  1. 无法隐式转换类型' System.Collections.Generic.IEnumerable'到'字符串'。

  2. ' StringBuilder的'不包含'反向'的定义没有扩展方法'反向'接受类型' StringBuilder'的第一个参数。可以找到

  3. 以相反顺序返回stringbuilder结果的正确格式是什么?

     where
          CASE [a]  
             WHEN 'YY' THEN dateadd(YY,[b],[c])
             WHEN 'DD' THEN dateadd(DD,[b],[c])
    ...
          END
    

    遗憾的是,这一段代码没有一行

    请投票删除此帖子,以便我可以回复XD

2 个答案:

答案 0 :(得分:3)

您必须将其转换为字符串,然后将其反转,将其转换为数组,然后从中创建一个新字符串:

return new string(sb.ToString().Reverse().ToArray());

答案 1 :(得分:1)

我们可以编写一个extension method,它遵循与StringBuilder类中存在的其他方法一起使用的模式 我的意思是,我们可以直接在StringBuilder缓冲区上执行相反的操作。

public static void(this StringBuilder sb)
{
    char t;
    int end = sb.Length - 1;
    int start = 0;

    while (end - start > 0)
    {
        t = sb[end];
        sb[end] = sb[start];
        sb[start] = t;
        start++;
        end--;
    }
}

现在我们可以只用一行代码

来使用扩展名
StringBuilder sb = new StringBuilder();
sb.Append("Testing reverse directly on the stringbuilder buffer");
sb.Reverse();
Console.WriteLine(sb.ToString());

警告,这只是回答发布问题的练习。我不知道它是否更有效率,或者这种方法是否存在缺陷 当然,没有像规范方法那样存储字符串和数组所需的新内存分配。鉴于用户已经有一个stringbuilder,我认为这种方法可以很容易地使用。