没有输入字符串的例外情况是什么?它会被显示吗

本文关键字:显示 是什么 情况 输入 字符串 | 更新日期: 2023-09-27 18:26:41

我被赋予了创建一个涉及数据字符串输入的应用程序的任务,它运行良好,但当涉及到在尝试中围绕它时。。。catch,无论放置了什么异常,无论输入了什么,try都会被接受。当没有输入任何内容时,我需要显示正确的异常。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _0
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter a name:");
            Console.WriteLine();
            string a = Console.ReadLine();
            Console.WriteLine();
            Product myProduct = new Product();
            myProduct.getName(a);
            try
            {
                Console.WriteLine("Your name is now: {0}", myProduct.getName(a));
                Console.WriteLine();
            }
            catch (Exception e)
            {
                if (a == "")
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
    }
    class Product
    {
        private string Name { get; set; }
        public string getName(string o)
        {
            return o.ToString();
        }
    }
}

没有输入字符串的例外情况是什么?它会被显示吗

try块中的任何东西都不会引发异常。它所做的只是将输出写入控制台。

您要查找的"异常"情况是输入未通过某些自定义验证(在这种情况下,是一个空字符串)。输入try块之前收集。由于这是自定义业务逻辑,所以抛出异常就取决于该业务逻辑了。类似这样的东西:

try
{
    string a = Console.ReadLine();
    if (string.IsNullOrEmpty(a))
        throw new Exception("Value must not be empty.");
    // the rest of the code
}
catch (Exception ex)
{
    Console.WriteLine(e.Message);
}

然而,这也不是一个好的做法。这是对逻辑流使用异常,这不是它们的预期目的。在某些情况下,验证逻辑可以抛出异常,但我不认为这是其中之一。这听起来更像是if语句的工作:

string a = Console.ReadLine();
if (string.IsNullOrEmpty(a))
    Console.WriteLine("Value must not be empty.");
else
{
    // the rest of the code
}

顺便说一句,当异常的细节不重要时,异常被错误地用于逻辑流的一个常见信号。请注意,在您发布的代码中,从Exception对象读取的唯一内容就是它的消息。在我的工作示例中,该消息是明确定义的。如果定义了自定义消息,并且该自定义消息是异常所需的全部内容,那么实际上不应该使用异常。

我怀疑,您永远不会以您想要的方式抛出异常。

与其尝试。。。catch循环,为什么不在编写之前先检查字符串是否为空:

if (a == "")
    {
         Console.WriteLine("You must enter a value etc");
    }
else{
    Console.WriteLine("Your name is now: {0}", myProduct.getName(a));
    Console.WriteLine();
}

异常的一般经验法则是,只有在真的出乎意料的情况下,你才应该检查它们,但你不能保证它永远不会发生。如果某件事会很常见,就把它作为逻辑的一部分。