具有异常处理的方法参数

时间:2012-09-18 14:28:15

标签: c# methods

对于C#而言,我显然是新手,而以下的程序来自Charles Petzold的书,我并不完全理解。 GetDouble方法中的参数是名为prompt的字符串。没有任何地方宣布这一点,我认为这是让我搞砸的事情。我看到Main方法正在调用GetDouble并且正在向控制台打印三个字符串,但这一切对我来说都很奇怪。这是典型的编程设计,还是这不是行业标准,而是为了展示如何做到这一点?这本书没有给出答案。我刚刚开始编程的自我不会将字符串传递给Main方法。有人可以帮我理顺吗?

using System;

class InputDoubles
{
    static void Main()
    {
        double dbase = GetDouble("Enter the base: ");
        double exp = GetDouble("enter the exponent: ");
        Console.WriteLine("{0} to the power of {1} is {2}", dbase, exp, Math.Pow(dbase, exp));
    }

    static double GetDouble(string prompt)
    {
        double value = Double.NaN;
        do
        {
            Console.Write(prompt);
            try
            {
                value = Double.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine();
                Console.WriteLine("you enter an invalid number!");
                Console.WriteLine("please try again");
                Console.WriteLine();

            }
        }

        while (Double.IsNaN(value));
        return value;

    }
}

3 个答案:

答案 0 :(得分:3)

  

这无处声明,我认为这让我感到困惑。

等待,它在那里声明 - 在方法的标题中:

static double GetDouble(string prompt)
//                      ^^^^^^^^^^^^^ This is the declaration of prompt

prompt与您看到的其他变量不同,它不是正常变量:它是方法的形式参数

与初始化并使用赋值运算符=分配显式的常规变量不同,通过调用方法,形式参数隐式。当您调用该方法时,您将使用实际参数传递一个表达式,该表达式用作该表达式到形式参数的赋值。想象一下,prompt变量在第一次调用之前被分配"Enter the base: ",然后在第二次调用之前被分配"enter the exponent: "以了解当您调用GetDouble时发生了什么。

答案 1 :(得分:1)

GetDouble(string)方法就是这样 - 它从输入中得到一个双倍 提示给用户的文本是一个参数,因为要输入两个不同的值:首先是基数,第二是指数。
通过使提示成为参数,GetDouble(string)方法可以处理从提示用户输入到返回值的所有内容。
另一种方法是在GetDouble(string)之外提示用户。这两种选择中的哪一种更适合是品味。

哦,就像你现在想的那样,这与方法中的异常处理无关。

答案 2 :(得分:0)

你可以这样改变它。它也是如此,但我认为更容易理解:

static void Main()
{ 
    string messageForDbaseParam="Enter the base: ";
    double dbase = GetDouble(messageForDbaseParam);
    string messageForExpParam ="enter the exponent: ";
    double exp = GetDouble(messageForExpParam);
    Console.WriteLine("{0} to the power of {1} is {2}", dbase, exp, Math.Pow(dbase, exp));
}


static double GetDouble(string prompt)
{
    double value = Double.NaN;
    Boolean incorrectValue=true;
    while(incorrectValue)
    {
        Console.Write(prompt);
        try
        {
            value = Double.Parse(Console.ReadLine());
            incorrectValue=false;
        }
        catch 
        {
            Console.WriteLine("error");
        }
    }        
    return value;

}