C# 无法测试回文

C# 无法测试回文,c#,C#,我试图在控制台中转换文本并反转它,以查看它是否是回文。如果是,则返回true;如果不是,则返回false。然而,由于我是新手,刚刚开始学习C#,所以我面临着错误。我得到的错误如下: 'Palindrome.IsPalindrome(string)':并非所有代码路径都返回值 我不知道如何解决这个问题,我也不太明白,因此任何建议都将不胜感激。多谢各位 using System; public class Palindrome { public static bool IsPalindro

我试图在控制台中转换文本并反转它,以查看它是否是回文。如果是,则返回true;如果不是,则返回false。然而,由于我是新手,刚刚开始学习C#,所以我面临着错误。我得到的错误如下:

'Palindrome.IsPalindrome(string)':并非所有代码路径都返回值

我不知道如何解决这个问题,我也不太明白,因此任何建议都将不胜感激。多谢各位

using System;

public class Palindrome
{
    public static bool IsPalindrome(string word)
    {

        char[] temp = word.ToCharArray();
        Array.Reverse(temp);
        string emordnilap = new string(temp);

        if(word.Equals(emordnilap)){
            Console.WriteLine("true");

        }else{
            Console.WriteLine("false");
        }

    }

    public static void Main(string[] args)
    {
        Console.WriteLine(Palindrome.IsPalindrome("Deleveled"));
    }

}

您的方法定义为
公共静态bool IsPalindrome(字符串字)

这意味着它必须
返回一个布尔值(true或false)

实际上,您没有返回任何内容,只是将其写入控制台,这就是您的错误所在-您没有返回值

您需要输入
返回true
返回false,这样通过该方法的每个可能路径都会返回您在方法签名中指定的
bool

这给您带来了另一个问题,因为您正在执行Console.WriteLine(),其中是IsPalindrome方法的
返回值。由于您返回的是
bool
,因此将其写入控制台很奇怪。它会起作用,但更好的方法是调用如下方法:

var isPalindrome = Palindrome.IsPalindrome("Deleveled");

if (isPalindrome == true)
{
   Console.WriteLine("It IS a palindrome!");
}
请注意,
if(isAlindrome==true)
可以缩短为
if(isAlindrome)

OO编程的一个核心方面是SOLID,这是编写代码的一些指导原则。其中之一是单一责任原则,这基本上意味着您应该尝试让代码的某些部分只做一件事

因此,您的isAlindrome最好只做一件事——如果单词是回文,则返回true或false——而不要做其他事情,例如向控制台写入。将其留给调用该方法的代码


当您的方法意外返回false时,只是一个提示-
Racecar
Racecar
不同-您必须对该案例采取一些措施。一种快速的方法是使用
ToUpper()
将值转换为大写,然后再反转并进行比较。

您的方法应该返回
bool
,而不是写入控制台。试试看:

public static bool IsPalindrome(string word)
{
        char[] temp = word.ToCharArray();
        Array.Reverse(temp);
        string emordnilap = new string(temp);

        if(word.Equals(emordnilap)){
            return true;    
        }
        else{
           return false;
        }
}

此方法可以采用的每个路径都必须返回一个布尔值:

using System;

public class Palindrome
{
    public static bool IsPalindrome(string word)
    {

        char[] temp = word.ToCharArray();
        Array.Reverse(temp);
        string emordnilap = new string(temp);

        if(word.Equals(emordnilap))
        {
            return true;
        }
        else
        {
           return false; 
        }

    }

    public static void Main(string[] args)
    {
        //The ToString() converts your boolean to a string
        Console.WriteLine(Palindrome.IsPalindrome("Deleveled").ToString());
    }

}

尝试更容易理解地命名变量。这将使你的生活更容易,如果你进入更大的项目。请参见
D
字符不等于
D
字符。您应该忽略用例比较。所有代码都可以写在一行中:
Console.WriteLine(word.Equals(word.Reverse(),StringComparison.CurrentCultureIgnoreCase))
需要使用return语句从方法返回值
isAlindrome()中没有返回值
return
<代码>返回单词.Equals(emornilap)?不管怎样,还是投票通过了谢谢你的反馈。我应该返回true或false而不是console。感谢You@RomainB. 是的,在更改return语句之后,我得到了输出。感谢您的反馈,在将console.WriteLine更改为返回true和false后,它现在可以工作了。谢谢