You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改C# Person类使其支持集合化实例(兼容单名称与名称列表初始化)

实现支持单个/批量创建的Person类

嘿,我来帮你搞定这个需求!要让Person类像FileInfo那样同时支持单个实例初始化和批量生成对象集合,我们可以通过保留原有构造函数+新增静态工厂方法的方式来实现——既兼容老代码,又能满足批量创建的需求,完全贴合你想要的使用体验。

修改后的完整代码

using System;
using System.Collections.Generic;
using System.Linq;

namespace Test
{
    public class Person
    {
        // 把字段改成只读属性,更符合C#封装规范
        public string FullName { get; }
        public string Organization { get; }

        // 保留原有单个Person的构造函数,确保老代码无需修改
        public Person(string organization, string fullName)
        {
            // 添加空值校验,避免后续逻辑出问题
            Organization = organization ?? throw new ArgumentNullException(nameof(organization));
            FullName = fullName ?? throw new ArgumentNullException(nameof(fullName));
        }

        // 静态工厂方法:接收组织名+全名列表,返回Person对象集合
        public static IEnumerable<Person> CreatePeople(string organization, IEnumerable<string> fullNames)
        {
            if (organization == null)
                throw new ArgumentNullException(nameof(organization));
            if (fullNames == null)
                throw new ArgumentNullException(nameof(fullNames));

            // 遍历全名列表,逐个创建Person实例并返回
            return fullNames.Select(name => new Person(organization, name));
        }

        // 重载静态方法:支持直接传入多个全名参数(语法糖,调用更便捷)
        public static IEnumerable<Person> CreatePeople(string organization, params string[] fullNames)
        {
            // 复用上面的方法,避免重复代码
            return CreatePeople(organization, (IEnumerable<string>)fullNames);
        }
    }
}

怎么使用它?

1. 创建单个Person对象(和原来的用法完全一致)

var singlePerson = new Person("Stack Exchange", "Robert");

2. 批量创建(传入全名列表)

var teamNames = new List<string> { "Alice", "Bob", "Charlie" };
var entireTeam = Person.CreatePeople("Stack Exchange", teamNames);

3. 批量创建(直接传多个全名参数)

// 不用先构造列表,直接写参数就行,非常方便
var entireTeam = Person.CreatePeople("Stack Exchange", "Alice", "Bob", "Charlie");

为什么这么设计?

  • 兼容性拉满:原有构造函数完全保留,老代码不需要做任何修改
  • 语义清晰:静态方法CreatePeople明确表达了“批量创建多个Person”的意图,和FileInfo的设计逻辑对齐(FileInfo对应单个文件,批量操作用静态方法/DirectoryInfo)
  • 健壮性提升:添加了空值校验,避免空引用异常破坏程序
  • 灵活性高:返回IEnumerable<Person>,你可以轻松把它转成List<Person>、Person[]等任意集合类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:07:44