我正在学习C#自己(不是家庭作业)并且在有用户输入时对方法重载感到困惑。
我正在进行一项练习,允许用户输入项目的出价金额。我需要包含3个重载方法(int,double,string)。 (练习说使用双倍而不是小数。)
我知道如何编写重载方法,我的困惑伴随着用户输入。如果我接受输入(ReadLine)作为字符串,它选择字符串方法,如果我接受输入为int,则调用int方法。我该如何处理?我使用tryParse吗?如何使用3种可能的输入方法(int,double,string)?
另外,要添加令人沮丧的扭曲,要接受字符串,它必须是数字,并以“$”符号或数字后跟“美元”开头。我希望我在下面的代码中正确完成了。不知道怎么用字符串修剪,所以我不得不按字符来做...
希望获得基本/简单的解释,因为我还没有学到任何太过花哨的东西。
谢谢!
namespace Auction
{
class Program
{
static void Main(string[] args)
{
string entryString;
//int entryInt; // do I need this?
//int entryDouble; // do I need this?
double bidNum;
const double MIN = 10.00;
Console.WriteLine("\t** WELCOME TO THE AUCTION! **\n");
Console.Write("Please enter a bid for the item: ");
entryString = Console.ReadLine().ToLower();
double.TryParse(entryString, out bidNum); // this turns it into a double...
BidMethod(bidNum, MIN);
Console.ReadLine();
}
private static void BidMethod(int bid, double MIN)
{ // OVERLOADED - ACCEPTS BID AS AN INT
Console.WriteLine("Bid is an int.");
Console.WriteLine("Your bid is: {0:C}", bid);
if (bid >= MIN)
Console.WriteLine("Your bid is over the minimum {0} bid amount.", MIN);
else
Console.WriteLine("Your bid is not over the minimum {0} bid amount.", MIN);
}
private static void BidMethod(double bid, double MIN)
{ // OVERLOADED - ACCEPTS BID AS A DOUBLE
Console.WriteLine("Bid is a double.");
Console.WriteLine("Your bid is: {0:C}", bid);
if (bid >= MIN)
Console.WriteLine("Your bid is over the minimum {0} bid amount.", MIN);
else
Console.WriteLine("Your bid is not over the minimum {0} bid amount.", MIN);
}
private static void BidMethod(string bid, double MIN)
{ // OVERLOADED - ACCEPTS BID AS A STRING
string amount;
int amountInt;
if (bid.StartsWith("$"))
amount = (bid as string).Trim('$'); // Remove the $
if (bid.EndsWith("dollar"))
amount = bid.TrimEnd(' ', 'd', 'o', 'l', 'l', 'a', 'r', 's');
else
amount = bid;
Int32.TryParse(amount, out amountInt); // Convert to Int
Console.WriteLine("Bid is a string.");
Console.WriteLine("Your bid is: {0:C}", bid);
if (amountInt >= MIN)
Console.WriteLine("Your bid is over the minimum {0} bid amount.", MIN);
else
Console.WriteLine("Your bid is not over the minimum {0} bid amount.", MIN);
}
}
}
答案 0 :(得分:2)
假设您希望支持各种输入金额的方式,那么我建议您使用TryParse
的想法可行:
int.TryParse
- 因为int
限制最多(不是
允许小数点等)double.TryParse
答案 1 :(得分:0)
我认为用int
版本替换double
和decimal
版本会更合适,因为decimal
更便于存储货币值(搜索SO了解更多详情)。
因此,阅读输入,搜索美元符号,如果没有,请使用decimal.TryParse()
和decimal
重载,否则使用string
重载。
由于处理数字是否包含美元符号没有区别,我会做以下事情。
...
string entryString = Console.ReadLine();
BidMethod(entryString, 10.00m); // m stands for decimal, d for double
...
private static void BidMethod(string bid, decimal min)
{
decimal number;
if (decimal.TryParse(bid.Replace("$", ""), out number))
{
Console.WriteLine("Your bid is: {0:C}", bid);
if (number >= min)
Console.WriteLine("Your bid is over the minimum {0} bid amount.", min);
else
Console.WriteLine("Your bid is not over the minimum {0} bid amount.", min);
}
}
答案 2 :(得分:0)
根据我的理解和您的意见:
因此,您需要(或练习请求)仅接受int
,double
或string
。
我认为您需要首先检查输入值是否包含 $ ,如果是,则可以调用字符串函数。
然后,如果成功,则使用int
将值检查为Int32.TryParse
,然后调用int函数
最后一步是使用double
Double.TryParse
Double
的长度超过int
,这就是为什么你应首先检查int
答案 3 :(得分:0)
using System;
using static System.Console;
namespace Auction
{
class Program
{
static void Main(string[] args)
{
string entryString;
decimal bidNum;
const decimal MIN = 10.00m;
Console.Write("Please enter a bid for the item: ");
entryString = Console.ReadLine().ToLower();
decimal.TryParse(entryString, out bidNum); // this turns it into a double...
BidMethod(bidNum, MIN);
Console.ReadLine();
}