没有输入字符串的例外情况是什么?它会被显示吗
本文关键字:显示 是什么 情况 输入 字符串 | 更新日期: 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();
}
异常的一般经验法则是,只有在真的出乎意料的情况下,你才应该检查它们,但你不能保证它永远不会发生。如果某件事会很常见,就把它作为逻辑的一部分。