如何使方法参数对于用户输入是可选的? (C#)

时间:2018-10-02 20:43:55

标签: c# class methods parameters

我在C#中有一个名为“运算符”的对象,该对象的方法从用户处获取两个数字输入并将它们加在一起。但是,我想将第二个参数(第二个输入)设为可选,以便如果用户不输入第二个数字,则默认值为“ 4”。

我知道有些问题,因为如果用户仅输入一个数字并在提示您进行第二次输入时按回车键,则它只是结束程序而不使用默认值。

此解决方案可能非常明显,但它使我难以理解。如果有人能看一下我的代码,看看我缺少的内容,我将不胜感激。

非常感谢您!

程序代码:

class Program
{
    static void Main(string[] args)
    {
        Operator operatorObject = new Operator();
        Console.WriteLine("Pick a number:");
        int userValue = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Pick another number--optional");
        int userValue2 = Convert.ToInt32(Console.ReadLine());

        int result = operatorObject.operate(userValue, userValue2);

        Console.WriteLine(result);
        Console.ReadLine();
    }
}

类代码:

public class Operator
{
    public int operate(int data, int input=4)
    {
        return data + input;
    }           
}

更新:谢谢大家的回答!由于有多种建议,我认为我现在可以正常使用了。非常感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

如果您省略输入值,则输入Console.ReadLine将返回空字符串,该字符串肯定不能转换为整数。

因此,为了使该参数能够省略,您需要指出 if 用户是否输入了任何内容:

int userValue2, userValue2;
int result;
Console.WriteLine("Pick a number:");
if(!int.TryParse(Console.ReadLine(), out userValue))
    throw new ArgumentException("no valid number");

Console.WriteLine("Pick another number--optional");
if(int.TryParse(Console.ReadLine(), out userValue2)
    result = operatorObject.operate(userValue, userValue2);
else
    result = operator.operate(userValue);

int.TryParse尝试解析用户提供的输入,如果解析失败,将返回false。因此,如果用户键入的内容与"MyString"完全不同,这也适用。

答案 1 :(得分:1)

问题是您要同时使用两个参数来调用方法。您应该检查是否传递第二个参数。如下所示:

public static void Main()
{
    Operator operatorObject = new Operator();
    Console.WriteLine("Pick a number:");
    int userValue = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Pick another number--optional");

    int userValue2;
    int result;
    if(int.TryParse(Console.ReadLine(), out userValue2))
    {
         result = operatorObject.operate(userValue,userValue2);
    } 
    else 
    {
         result = operatorObject.operate(userValue);
    }

    Console.WriteLine(result);
    Console.ReadLine();
}

答案 2 :(得分:0)

类似的东西:

    static void Main(string[] args)
{
    Operator operatorObject = new Operator();
    Console.WriteLine("Pick a number:");
    var val1 = Console.ReadLine();
    int userValue = 0;
    if (val1 != null && val1.Length > 0)
    {
        userValue = Convert.ToInt32(val1);
    }
    Console.WriteLine("Pick another number--optional");
    var val2 = Console.ReadLine();
    int userValue = 0;
    int userValue2 = 0;
    if (val2 != null && val2.Length > 0)
    {
        userValue2 = Convert.ToInt32(val2);
    }


    int result = operatorObject.operate(userValue, userValue2);

    Console.WriteLine(result);
    Console.ReadLine();
}
public class Operator
{
    public int operate(int data, int input = 4)
    {
        return data + input;
    }
}

答案 3 :(得分:0)

class Program
{
    static void Main(string[] args)
    {
        Operator operatorObject = new Operator();
        Console.WriteLine("Pick a number:");
        int userValue = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Pick another number--optional");
        var userValue2IsValid = int.TryParse(Console.ReadLine(), out int userValue2);

        int result = 0;
        if (userValue2IsValid) {
            result = operatorObject.operate(userValue, userValue2);
        }
        else {
            result = operatorObject.operate(userValue);
        }

        Console.WriteLine(result);
        Console.ReadLine();
    }
}

答案 4 :(得分:-1)

如何?

class Program
{
    static void Main(string[] args)
    {
        Operator operatorObject = new Operator();
        Console.WriteLine("Pick a number:");

        int result = 0;

        int userValue;
        if (int.TryParse(Console.ReadLine(), out userValue))
        {
            Console.WriteLine("Pick another number--optional");
            int userValue2;
            if (int.TryParse(Console.ReadLine(), out userValue2))
            {
                result = operatorObject.operate(userValue, userValue2);
            }
            else
            {
                result = operatorObject.operate(userValue);
            }
        }
        else
        {
            Main(null);
        }

        Console.WriteLine(result);
        Console.ReadLine();
    }

  ...

}