大家好。

几年后,我又回到了C#中,几乎没有遇到我收到的错误。我写了一个练习程序来确定一个单词是否是回文(前后相同)。但是,我收到一个使我感到困惑的错误。

我尝试调用Math.Ceiling(word.Length/2)来获取单词的中间部分,但是它给了我以下错误:
“以下方法或属性之间的调用不明确:'Math.Ceiling(decimal)和Math.Ceiling(double)”

尽管我知道这是编译器担心识别正确的重载方法的原因,但是不确定如何指示我使用的是哪个。我也不明白为什么这很重要?

这是我的完整程序:

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string word = "Deleveled";
            word = word.ToUpper();
            bool isPalindrome = true;
            for (var i = 0; i <= Math.Ceiling(word.Length / 2); i++)
            {
                char tmp = word[word.Length - i - 1];
                if (Char.ToUpper(word[i]) != Char.ToUpper(tmp))
                {
                    isPalindrome = false;
                    break;
                }
            }
            Console.WriteLine(isPalindrome);
            Console.ReadLine();
        }
    }
}

如果有人可以帮助我了解这里的问题,我将不胜感激。

提前谢谢

最佳答案

整数除法总是产生整数;所以:word.Length / 2返回int(四舍五入)。

当您对此调用Math.Ceiling时,您正在传递一个整数,但是不是 Math.Ceiling(int)。它有两个选择:Math.Ceiling(double)Math.Ceiling(decimal),但是:它可以使用任何一个,而且从编译器的 Angular 来看,这两个都不是更好的选择。

坦白地说,使用通用的“页数”公式可能会更简单:

int pages = (items + pageSize - 1) / pageSize;

在这种情况下,它变得简单:
int upperLimit = (word.Length + 1) / 2;

(请注意,通用页数计算公式也可以写成int pages = ((items - 1) / pageSize) + 1;,尽管在这种情况下,要替换固定的页面大小会更困难)

07-27 22:00