避免更新对象属性的冗余

时间:2012-04-25 14:59:15

标签: c#

当我实例化一个新实体时,它看起来像这样:

var myEntity = new MyEntity() 
{
    Field1 = "myValue",
    Field2 = "myOtherValue",
    ...
}

这可以避免多次写myEntity.Field1

但是当我必须更新多个属性时,我不知道有什么办法可以避免重复代码。所以此刻,我确实喜欢这个:

myEntity.Field1 = "myNewValue";
myEntity.Field2 = "myOtherNewValue";
...

C#是否允许更简洁的方式更新多个属性?

3 个答案:

答案 0 :(得分:6)

查看C# with keyword equivalent。这有点草率,但它是最接近VB.NET With statement的。

另请参阅此博文:Simple equivalent of “With” statement in C#

答案 1 :(得分:2)

继续上面的@daryal评论,你可以创建一个所有参数都是可选的更新方法:

public void UpdateEntity(string Field1 = null, string Field2 = null, string Field3 = null) 
{
  this.Field1 = Field1 ?? this.Field1;
  this.Field2 = Field2 ?? this.Field2;
  this.Field3 = Field3 ?? this.Field3;
}

然后使用命名参数调用它:

e.UpdateEntity(Field1: "foo", Field3: "fiz");

这不是最干净的解决方案,而是另一种选择。如果我一直在做这样的事情,我可能会选择@Brian共享的“C#with keyword equivalent”。

注意:此解决方案需要C#4。

答案 2 :(得分:1)

不。 VB.NET有With statement,但在C#中没有等价物。