使用Array.Reverse时遇到麻烦

时间:2018-05-08 15:13:39

标签: c#

我正在编写代码来检查字符串中的对称性。我转换为Char数组,然后我想使用Array.Reverse方法。我一直得到一个无法将类型void转换为Char []。非常感谢我的代码如下。

namespace ConsoleApp1
{
  class Program
  {
    static void Main(string[] args)
    {
        checkPalindrome("aabaa");
    }
   public static bool checkPalindrome(string inputString)
    { 
        char[] charArray = inputString.ToCharArray();
        char[] reverseArray = Array.Reverse(charArray);
        Array.Reverse(charArray);

    //Console.Write(charArray);
    //Console.Write(reverseArray);

    if (charArray = Array.Reverse(charArray))
    {
        return true;
    }
    else
    {
        return false;
    }
  }

  }
}

3 个答案:

答案 0 :(得分:8)

你的问题在这里:

char[] reverseArray = Array.Reverse(charArray);

Array.Reverse更改传递它的数组的内容。它没有返回任何值。

你可以使用LINQ代替这样做:

char[] reverseArray = charArray.Reverse().ToArray();

然后,当你检查是否相等时,你需要做的不仅仅是默认的object-equals类型的相等性检查:

if (charArray.SequenceEqual(reverseArray))

此外,.ToArray()仅在您需要数组时才需要,并且您不需要SequenceEqual()if(something) {return true;} else {return false;}模式可以简化为return something;

所以整个方法实际上可以写成一行:

public static bool checkPalindrome(string inputString)
{ 
    return inputString.Reverse().SequenceEqual(inputString);
}

答案 1 :(得分:0)

更好的方法 - 没有数组克隆/数组提取:

    static bool checkPalindrome(string inputString)
    {
        var length = inputString.Length;
        var half = length / 2 + 1;
        return length <= 1 || inputString.Take(half).SequenceEqual(inputString.Reverse().Take(half));
    }

答案 2 :(得分:0)

这是确定string中的对称性的更好方法。

public bool IsSymetric(string str)
{
    if(str == null) return true; // or false or throw an exception

    for(int i = 0; i < str.Length/2; i++)
    {
        if(str[i] != str[str.Length - 1 - i])
        {
            return false;
        }
    }

    return true;
}