像在构造函数中一样使用大括号为基础对象设置新值

Using curly braces like in constructor to set new values to a base object

如何在修改现有实例时使用对象构造函数中的大括号?

我在构造函数中尝试了浅复制和深复制,但似乎没有办法用所需的对象实例换出 this,也没有简单可靠的方法来设置所有构造函数中的(在开发过程中不断变化的)字段和属性。

正如您在这里看到的,与旧的 get { return ... } 方式相比,花括号节省了很多 space:

public static MyClass MyClass1 => new MyClass()
{
    Property1 = 20,
    Property2 = "some text",
    Property3 = new MyOtherClass(MyEnum.Something)
};

基本相同的代码,但多了 5 行:

public static MyClass MyClass2
{
    get
    {
        var instance = new MyClass(); // or it could be  = MyClass1;
        instance.Property1 = 42;
        instance.Property2 = "some other text";
        instance.Property3 = new MyOtherClass(MyEnum.SomethingElse);
        return instance;
    }
}

我的目标是使用花括号设置基础对象的新 属性 值(无需继承或在构造函数中手动执行 shallow/deep 复制)以保存所有垂直 space。我该怎么做?

我经常使用完整的文档自动格式化,所以手动格式化代码并且只是不触摸它是行不通的。

我正在尝试解决的问题: get { ... } -style getter 在自动格式化时占用了额外的 5 行代码。 => - 样式 getter 更紧凑,我想找到一种方法来代替它。

您要使用 属性 吗?

class MyClass()
        {
            private int myInt;

            public int MyInt { get; set; }
        }

想通了:

public class MyClass
{
    public MyClass() { }
    public MyClass(MyClass baseInstance)
    {
        var fields = typeof(MapObject).GetFields();
        foreach (var field in fields)
            field.SetValue(this, field.GetValue(baseInstance));

        var props = typeof(BaseItems).GetProperties();
        foreach (var prop in props)
            if (prop.CanWrite)
                prop.SetValue(this, prop.GetValue(baseInstance));
    }
}

…让你这样做:

public static MyClass MyClass2 => new MyClass(MyClass1)
{
    Property1 = 42,
    Property2 = "some other text",
    Property3 = new MyOtherClass(MyEnum.SomethingElse)
};

虽然不理想,但对我有用。