像在构造函数中一样使用大括号为基础对象设置新值
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)
};
虽然不理想,但对我有用。
如何在修改现有实例时使用对象构造函数中的大括号?
我在构造函数中尝试了浅复制和深复制,但似乎没有办法用所需的对象实例换出 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)
};
虽然不理想,但对我有用。