You need to enable JavaScript to run this app. C#如何让try/catch捕获List超量添加事件,抛出TableFull满员异常
优惠活动
大模型
产品
解决方案
定价
更多

C#如何让try/catch捕获List超量添加事件,抛出TableFull满员异常

问题原因

你对List<T>构造函数的参数存在误解:传入的int值是初始容量,仅用于预先分配内存空间降低后续扩容的性能损耗,并非列表的最大元素上限。当添加的元素数量超过初始容量时,List<T>会自动申请更大的内存完成扩容,全程不会抛出异常,这是你当前代码无法触发预期逻辑的核心原因。

修改方案

你需要自己封装客人添加的校验逻辑,禁止外部直接操作内部的客人列表,具体修改规则如下:

  • 先自定义TableFull异常类,继承自Exception,符合C#自定义异常的规范
  • 修改Table类的设计:将ListOfGuests改为私有成员,对外暴露AddGuest方法,在方法内判断当前客人数量是否等于椅子上限,超出则抛出TableFull异常
  • 主函数中调用封装好的AddGuest方法添加客人即可,同时已修正原代码中NubmerOfChairs的拼写错误
修改后完整代码
namespace test
{
    class Program
    {
        // 自定义桌满异常类
        public class TableFull : Exception
        {
            public TableFull(string message) : base(message) { }
        }

        class Table
        {
            public int NumberOfChairs { get; set; }
            // 客人列表改为私有,避免外部直接操作绕过校验
            private List<Gost> ListOfGuests { get; set; }

            public Table(int ChairNum)
            {
                this.NumberOfChairs = ChairNum;
                this.ListOfGuests = new List<Gost>(ChairNum);
            }

            // 封装添加客人方法,加入容量校验
            public void AddGuest(Gost guest)
            {
                if (ListOfGuests.Count >= NumberOfChairs)
                {
                    throw new TableFull("No chairs left");
                }
                ListOfGuests.Add(guest);
            }
        }

        class Gost {

            public string name;
            public string secname;
            public string gender;
            public string status;
            public string bd;
            public string gmail;

            public Gost(string name, string secname, string gender, string status, string bd, string gmail)
            {
                this.name = name;
                this.secname = secname;
                this.gender = gender;
                this.status = status;
                this.bd = bd;
                this.gmail = gmail;        
            }
        
        }
        static void Main(string[] args)
        {
            Table polnaMiza = new Table(2);
            Gost novGost = new Gost("Jack1", "black1", "M", "student", "22.2.1966", "testxxx@gmail.com");
            Gost novGost2 = new Gost("Jack2", "black2", "M", "student", "22.2.1966", "testxxx@gmail.com");
            Gost novGost3 = new Gost("Jack3", "black3", "M", "student", "22.2.1966", "testxxx@gmail.com");

            polnaMiza.AddGuest(novGost);
            polnaMiza.AddGuest(novGost2);
            // 执行到下一行就会触发TableFull异常
            polnaMiza.AddGuest(novGost3);
        }
    }
}

内容的提问来源于stack exchange,提问作者Jure Kozole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 16:54:03