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

C#如何批量将类的所有字符串类型属性设置为空字符串

C#批量重置类所有string属性为string.Empty的实现方案

逐行手写赋值虽然运行时性能最高,但可维护性极差,后续类新增、修改、删除string属性都要同步修改Clear方法,冗余度高还容易漏改,以下是几种更优的实现方式:


方案1:反射实现(通用无侵入,适合绝大多数场景)

核心逻辑是遍历当前类实例的所有可写string类型属性,统一赋值为string.Empty,不需要提前硬编码属性名,后续类调整string属性也不需要修改Clear方法逻辑。
基础实现代码:

public void Clear()
{
    // 筛选当前类所有public、可写的实例级string属性
    var stringProperties = GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
        .Where(p => p.PropertyType == typeof(string) && p.CanWrite);
    
    foreach (var prop in stringProperties)
    {
        prop.SetValue(this, string.Empty);
    }
}

性能优化提示:如果Clear方法调用频率很高,可以把当前类的string属性信息缓存到类的静态字段中,只在类第一次加载时执行一次反射扫描,避免每次调用都重复执行反射逻辑,优化后性能和手写逐行赋值几乎持平。

缓存优化版本示例:

// 静态字段:程序运行周期内只执行一次反射,扫描所有需要清空的string属性
// 注意将typeof()内的类名替换为你当前的实际类名
private static readonly System.Reflection.PropertyInfo[] _cachedStringProperties = 
    typeof(YourClassName).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
    .Where(p => p.PropertyType == typeof(string) && p.CanWrite)
    .ToArray();

public void Clear()
{
    foreach (var prop in _cachedStringProperties)
    {
        prop.SetValue(this, string.Empty);
    }
}

方案2:源生成器实现(零运行时开销,适合性能要求极高的场景)

如果不想引入反射开销,可以用C#源生成器在编译阶段自动扫描类的所有string属性,自动生成和手写逐行赋值逻辑完全一致的IL代码,既没有运行时反射损耗,也不需要手动维护赋值代码。
使用时只需要把类标记为partial即可:

// 标记为partial类,供源生成器在编译时追加Clear方法实现
public partial class YourBusinessDto
{
    // 这里保留你原本定义的20个string属性即可,不需要额外修改
    public string Name { get; set; }
    public string Address { get; set; }
    // ... 其余属性定义
}

编译完成后源生成器会自动生成等价于逐行写属性名 = string.Empty的Clear方法,可维护性和性能都拉满。


可选扩展逻辑

如果类中存在不需要清空的特殊string属性,可以自定义一个SkipClearAttribute特性,给不需要重置的属性打上标记,在反射扫描/源生成器扫描时过滤掉带标记的属性即可,不需要修改核心Clear逻辑。如果需要处理非public的string属性,只需要调整反射时的BindingFlags枚举值,把非public属性纳入扫描范围即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:03:14