运算符(*)不能应用于'object'和'double'类型的操作数这是我的代码。我不明白问题出在哪里,但VisualStudio2008指出运算符(*)不能应用于“object”和“double”类型的操作数谢谢...#region使用指令使用System;使用System.Collections.Generic;使用系统文本;#endregionnamespaceDailyRate{classProgram{staticvoidMain(string[]args){(newProgram()).run();}publicvoidrun(){doubledailyRate=readDouble("请输入您的每日费率:");intnoOfDays=readInt("请输入天数:");writeFree(CalculateFee(dailyRate,noOfDays));}privatevoidwriteFree(objectp){Console.WriteLine("顾问费用为:{0}",p*1.1);}privatedoubleCalculateFee(doubledailyRate,intnoOfDays){returndailyRate*noOfDays;}privateintreadInt(stringp){Console.Write(p);字符串行=Console.ReadLine();返回int.Parse(行);}privatedoublereadDouble(stringp){Console.Write(p);字符串行=Console.ReadLine();返回double.Parse(line);}}}到目前为止有十六个答案,十五个答案告诉你你做错了什么。首先,正如每个人告诉您的那样,您不能将对象乘以双倍。但解决方案不是双倍乘以双倍!你在做财务计算;切勿使用双打进行财务计算。双打是物理问题,而不是金钱问题。正确的做法是首先停止使用双打。您应该使用十进制,而不是双精度。(当你这样做时:C#中的标准是CapitalizeYourMethodsLikeThis,而不是像这样。)你的writeFee方法无法编译。你不能将一个对象与一个数字相乘,编译器不知道如何-一个对象可以是任何东西,它可能不是一个数字。这种情况解决方法很简单,只要将writeFee参数声明为double即可:privatevoidwriteFree(doublep){Console.WriteLine("顾问费用为:{0}",p*1.1);}in在你的代码中privatevoidwriteFree(objectp){Console.WriteLine("顾问费用为:{0}",p*1.1);}P是一个对象,编译器不知道如何将对象和double相乘。privatevoidwriteFree(doublep){Console.WriteLine("顾问费用为:{0}",p*1.1);}只要你用双打调用函数就可以工作。对象没有*运算符。您的方法出于某种未知原因正在获取一个对象。在我看来,它应该采用数值。因此,要么:A)更改writeFree方法以采用适当的数字类型,或者B)在相乘之前将对象转换为适当的数字类型。当然,鉴于您向我们展示的示例,选项B实际上只是选项A的穷人版本。...所以选择A。考虑:writeFree("Uhoh!");您对“Uhoh!”的结果有何期待?*1.1“呃哦!”*1.1“呃哦!”*1.1是什么?如果您的代码已编译,那将是合法的。UseConsole.WriteLine("顾问费用为:{0}",(double)p*1.1);你的问题出在这个方法上:privatevoidwriteFree(objectp){Console.WriteLine("顾问费是:{0}",p*1.1);}需要修改方法的签名,使其知道p是一个双精度数,或者p是一个双精度数:privatevoidwriteFree(doublep){Console.WriteLine("顾问费用为:{0}",p*1.1);}orprivatevoidwriteFree(objectp){Console.WriteLine("顾问费用为:{0}",(double)p*1.1);}如果要在数学运算中使用p,则p必须是数值类型。Console.WriteLine("顾问费用为:{0}",((double)p)*1.1);由于看起来您希望将双精度值传递给writeFree,因此为具有意义的p声明适当的类型会更有帮助。privatevoidwriteFree(doublep)这将消除强制转换操作的需要。你需要将p转换为doubleConsole.WriteLine("顾问费用为:{0}",(double)p*1.1);或将您的writeFree更改为接受double,它会起作用,这也很有意义,因为您的CalculateFee已经返回了double。privatevoidwriteFree(doublep){Console.WriteLine("顾问费用为:{0}",p*1.1);}尝试Console.WriteLine("顾问费用为:{0}",Double.Parse(p)*1.1);这么写:Console.WriteLine("顾问的费用是:{0}",((double)p*1.1));这一行中的p是一个对象而不是双精度对象。对象不能乘以double。更改:privatevoidwriteFree(objectp){Console.WriteLine("顾问费用为:{0}",p*1.1);}to:privatevoidwriteFree(doublep){Console.WriteLine("顾问费用为:{0}",p*1.1);到目前为止,正如您编写的那样,编译器认为您正在尝试将一个对象乘以1.1,但它不知道该怎么做。线上:Console.WriteLine("顾问费用为:{0}",p*1.1);您应该将p(它是一个对象)转换为double或其他一些数字类型。希望有所帮助。Console.WriteLine("顾问费用为:{0}",p*1.1);p是一个对象(参见方法签名)。如果你知道什么类型那么你可以简单地转换Console.WriteLine("顾问的费用是:{0}",(double)p*1.1);我已经做了double,但你可以使用float、int等。如果你不知道类型是什么,那么你需要使用“as”或“is”/typeof等进行一些简单的类型测试。问题是你不能将对象乘以double。从代码使用来看,应该改成privatevoidwriteFree(objectp){Console.WriteLine("咨询费为:{0}",p*1.1);}toprivatevoidwriteFree(doublep){Console.WriteLine("顾问费用为:{0}",p*1.1);你不能说你正在将一个对象乘以一个数字。你要做的就是保证参数是数值,所以你要把函数参数类型改成数值类型。不要在函数内部使用(双重)转换,因为如果将非数字参数传递给函数,它可能会导致奇怪的行为。CleanCode说,始终使用您需要的最具体的类型作为函数参数以避免错误。在您的情况下,它可以是两倍。您的问题出在WriteFree方法中:privatevoidwriteFree(objectp){Console.WriteLine("顾问费用为:{0}",p*1.1);您不能乘以object*1.1以将其更改为WriteFree(doublep)或者,如果您必须使用对象参数,请尝试将P解析为double。以上就是C#学习教程:操作符(*)不能应用于'object'和'double'类型的操作数分享所有内容。如果对大家有用,需要进一步了解C#学习教程,还望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
