C# 如何为无输入设置异常处理

C# 如何为无输入设置异常处理,c#,C#,这是我的程序,用于输入2个数字和一个运算符,然后进行计算并给出答案(感谢async之前的帮助)。到目前为止,除了我什么都没有输入之外,一切都很好。我试图让它说没有输入,再试一次,但它只是崩溃了。有人知道为什么吗?提前谢谢 using System; class Calculation { public static void Main(string[] data) { if (data.Length == 0) { Con

这是我的程序,用于输入2个数字和一个运算符,然后进行计算并给出答案(感谢async之前的帮助)。到目前为止,除了我什么都没有输入之外,一切都很好。我试图让它说没有输入,再试一次,但它只是崩溃了。有人知道为什么吗?提前谢谢

using System;
class Calculation
{
    public static void Main(string[] data)
    {

        if (data.Length == 0)
        {
            Console.WriteLine("No input... Try again");

            return;
        }

        double result;

        if (!Double.TryParse(data[0], out result))
        {
            Console.WriteLine("Invalid input: " + data[0]);

            return;
        }

        Console.WriteLine("Starting with number: " + result);

        char op;
        double number;

        string errorMessage;

        do
        {
            if (!TryGetData(out op, out number, out errorMessage))
            {
                Console.WriteLine("Invalid input: " + errorMessage);

                continue;
            }

            switch (op)
            {
                case '+':
                    result += number;
                    break;
                case '-':
                    result -= number;
                    break;
                case '*':
                    result *= number;
                    break;
                case '/':
                    result /= number;
                    break;
                default:
                    Console.WriteLine("Done");
                    continue;
            }

            Console.WriteLine("Result = " + result.ToString());


        } while (Char.ToLower(op) != 'q');
    }

    static bool TryGetData(out char anOperator, out double aNumber, out string message)
    {
        aNumber = 0;
        message = null;

        Console.Write("Enter an operator and a number or 'q' to quit: ");

        var line = Console.ReadLine();

        anOperator = line[0];

        if (anOperator != 'q' && anOperator != 'Q')
        {
            if (line.Length <= 2)
            {
                message = "Enter an operator followed by a space and then a number.";

                return false;
            }

            var isValidNumber = Double.TryParse(line.Substring(2), out aNumber);

            if (!isValidNumber)
            {
                message = "Invalid input: " + line.Substring(2);

                return false;
            }

            if (isValidNumber && (anOperator == '/' && aNumber == 0))
            {
                message = "Cannot divide by 0.";

                return false;
            }

            if (line[1] != ' ')
            {
                message = "Make sure to put a space between operator and number.";

                return false;
            }

        }

        return true;
    }
}
使用系统;
阶级计算
{
公共静态void Main(字符串[]数据)
{
如果(data.Length==0)
{
WriteLine(“无输入…重试”);
回来
}
双重结果;
如果(!Double.TryParse(数据[0],输出结果))
{
Console.WriteLine(“无效输入:+数据[0]);
回来
}
Console.WriteLine(“以数字开头:+结果”);
char op;
双数;
字符串错误消息;
做
{
如果(!TryGetData(输出op、输出编号、输出错误消息))
{
Console.WriteLine(“无效输入:+errorMessage”);
持续
}
开关(op)
{
格“+”:
结果+=数字;
打破
案例'-':
结果-=数量;
打破
案例“*”:
结果*=数字;
打破
案例“/”:
结果/=数字;
打破
违约:
控制台。写入线(“完成”);
持续
}
Console.WriteLine(“Result=“+Result.ToString());
}while(Char.ToLower(op)!='q');
}
静态bool TryGetData(输出字符运算符、输出双数、输出字符串消息)
{
a数=0;
消息=null;
控制台。写入(“输入一个运算符和一个数字或'q'退出:”);
var line=Console.ReadLine();
运算符=行[0];
if(anOperator!='q'&&anOperator!='q')
{

如果(line.Length您告诉它检查一个空变量的Length属性。 如果要删除,可以检查是否为null,然后检查长度

C#本质上是一种短路语言,如果if语句的第一部分为假(或真),则不会对其他部分进行计算

if (data == null || data.length == 0) 
{
    Console.WriteLine("No input... Try again");
    return;
}

“但它只是崩溃了”-请在调试器中运行它,因为它会更快。我们不是来为您调试整个代码的。祝您好运!请尝试data==null,但data.lengthif除外(data==null | | data.length==0)很抱歉,我本应将此内容放在原始帖子中,但错误是system.string.get_chars at calculation.trygetdata at calculation.main处的system.indexoutofrangeexception,并且在添加if(data==null | | data.length==0)后仍会发生错误感谢您的回复和解释,在执行您所说的操作后,错误仍然会发生。错误是system.string.get_chars at calculation.trygetdata at calculation.main上的system.indexoutofrangeexception