如何利用活动名称从测试数据中获取对应学生的姓氏列表?
解决方案
首先你需要一个活动数据源来存储所有创建的Activity对象,这样才能通过活动名称找到对应的实例。你的当前代码里直接新建了一个空的Activity,这显然无法获取到测试数据里的活动。
步骤1:创建活动存储集合
可以在Program.cs里添加一个静态集合来保存所有活动,或者在测试类中把活动存入一个可访问的集合(比如把测试里的activity1加入到这个集合)。
比如在Program.cs中添加:
// 静态集合,用来存储所有活动实例 public static List<Activity> AllActivities = new List<Activity>();
然后在测试方法里,创建活动后把它加入这个集合:
[TestMethod] public void TestMethod1() { Activity activity1 = new Activity("Purchasing", "Top floor", new List<Pupil> { pupil1, pupil2 }); // 将活动加入全局集合 Program.AllActivities.Add(activity1); }
步骤2:修改funcSurnamesInActivity方法
现在可以通过活动名称从集合中查找对应的Activity,再提取学生姓氏:
public IList<string> funcSurnamesInActivity(string activityName) { IList<string> surnames = new List<string>(); // 根据活动名称查找对应的活动(忽略大小写可以用StringComparison.OrdinalIgnoreCase) Activity targetActivity = Program.AllActivities.FirstOrDefault(act => act.Name == activityName); // 如果找到活动,遍历成员提取姓氏 if (targetActivity != null && targetActivity.Members != null) { foreach (Pupil person in targetActivity.Members) { surnames.Add(person.Surname); } } // 找不到活动则返回空列表,也可以根据需求抛出异常 return surnames; }
补充说明
- 如果需要支持多个同名活动,可以用
Where代替FirstOrDefault,然后合并所有匹配活动的学生姓氏。 - 要注意空引用问题:比如
Members可能为null,所以需要先判断,避免NullReferenceException。 - 实际作业中,也可以把活动集合作为依赖注入到方法所在的类中,而不是用静态集合,不过静态集合对于简单的作业场景足够用了。
内容的提问来源于stack exchange,提问作者MStar08
相关产品推荐
相关产品推荐

