如何阻止用户为C# Book类的BookName属性输入整数?
阻止用户输入纯整数作为Book书名的实现方案
首先,你当前的Book类代码如下:
private string? _bookName; public string? BookName { get { return _bookName; } set { _bookName = value; } }
要实现阻止用户输入纯整数作为书名的功能,有几种实用的实现方式,根据你的需求选择即可:
方式1:在输入环节直接验证(简单直观)
在Main方法获取用户输入时,循环检查输入是否为纯整数,直到用户输入符合要求:
List<Book> books = new List<Book>(); Book newBook = new Book(); Console.WriteLine("请输入书名:"); string? input = Console.ReadLine(); // 循环验证:如果输入是纯整数,就提示重新输入 while (!string.IsNullOrEmpty(input) && input.All(char.IsDigit)) { Console.WriteLine("书名不能是纯整数,请重新输入:"); input = Console.ReadLine(); } newBook.BookName = input; books.Add(newBook);
- 逻辑说明:
input.All(char.IsDigit)会检查输入的每一个字符都是数字;!string.IsNullOrEmpty(input)避免空输入触发错误判断。
方式2:在Book类的属性Setter中验证(全局管控)
把验证逻辑封装到Book类的BookName属性里,这样无论在哪里给BookName赋值,都会自动验证,避免遗漏:
private string? _bookName; public string? BookName { get { return _bookName; } set { // 验证规则:非空且全为数字的输入不允许 if (!string.IsNullOrEmpty(value) && value.All(char.IsDigit)) { // 这里可以选择抛异常、提示用户或保持原有值 throw new ArgumentException("书名不能是纯整数"); // 若不想抛异常,也可以替换为:_bookName = _bookName; // 保留原有值 // 或者:Console.WriteLine("书名格式无效,未设置成功"); } else { _bookName = value; } } }
在Main方法中调用时,可以捕获异常处理:
List<Book> books = new List<Book>(); Book newBook = new Book(); Console.WriteLine("请输入书名:"); string? input = Console.ReadLine(); try { newBook.BookName = input; books.Add(newBook); Console.WriteLine("书名设置成功"); } catch (ArgumentException ex) { Console.WriteLine(ex.Message); }
方式3:封装通用验证方法(复用性强)
如果多个地方需要用到类似验证,可以封装一个静态方法:
public static bool IsPureInteger(string? input) { return !string.IsNullOrEmpty(input) && input.All(char.IsDigit); }
然后在输入时调用:
Console.WriteLine("请输入书名:"); string? input = Console.ReadLine(); while (IsPureInteger(input)) { Console.WriteLine("书名不能是纯整数,请重新输入:"); input = Console.ReadLine(); } newBook.BookName = input; books.Add(newBook);
内容的提问来源于stack exchange,提问作者behnami454
相关产品推荐
相关产品推荐

