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

能否在对象初始化后使用大括号批量修改多个成员值?

关于C#对象批量修改成员的语法方案

C#本身没有你示例中那种直接通过myForm = { ... }来批量修改已有对象成员的语法,但有几种实用的替代方案可以实现类似的批量修改效果:

1. 使用with表达式(C# 9.0及以上)

这个语法会基于原有对象创建一个新的实例,复制原有成员的值,同时修改你指定的成员。适合不需要保留原对象引用的场景:

// 基于原实例创建新实例并修改指定成员
myForm = myForm with
{
    Left = 123,
    Text = "foo",
    AllowDrop = false
};

注意:这会生成新对象,原对象的引用会被替换,如果其他地方还持有原对象的引用,那些引用指向的实例不会被修改。

2. 自定义扩展方法实现批量修改

如果需要直接修改原有对象的成员,可以写一个扩展方法,用lambda包裹批量赋值逻辑,写法简洁且有编译时检查:

// 定义扩展方法
public static class FormExtensions
{
    public static void Update(this Form form, Action<Form> updateAction)
    {
        updateAction(form);
    }
}

// 使用方式
myForm.Update(f => 
{
    f.Left = 123;
    f.Text = "foo";
    f.AllowDrop = false;
});

这种方式直接操作原有对象,不会创建新实例,完全符合你想批量修改已有对象的需求。

3. 反射配合匿名类型(不推荐)

可以通过反射读取匿名类型的属性值,再赋值给目标对象,但这种方式性能差,且没有编译时类型检查,容易出现错误,仅作为了解:

var updates = new { Left = 123, Text = "foo", AllowDrop = false };
foreach (var prop in updates.GetType().GetProperties())
{
    var targetProp = myForm.GetType().GetProperty(prop.Name);
    targetProp?.SetValue(myForm, prop.GetValue(updates));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:45:50