我有一个问题要问你。在方法中更改对象属性的最佳做法是什么。我们假设我有一个这样的方法:
public void ChangeThis(MyObj myobj)
{
myobj.Prop = 5;
}
返回那个对象是不是更好,就像我们想表明我们改变一些东西一样?
public MyObj ChangeThis(MyObj myobj)
{
myobj.Prop = 5;
return myobj;
}
从方法更改对象属性的最佳做法是什么?
答案 0 :(得分:3)
第二种方法很糟糕,因为对象的新实例是使用changed属性创建还是返回当前实例是不明确的。
如果我的对象是不可变的,我只会使用第二种方法。
方法的名称ChangeThis
表示该对象是可变的,但是通过返回一个对象,它表明它们不是。
答案 1 :(得分:1)
如果您想明确表示对象的内部状态已更改,请通过为方法选择正确的名称并添加适当的XML文档来实现。
我认为这不足以让对象返回客户端,老实说,这让人感到困惑。你回来了一个新对象吗?或者它是作为参数传递的相同对象?但是,如果类型是不可变的,那么应该返回它。
答案 2 :(得分:1)
这取决于。
虽然第一种情况更常出现,但第二种情况是有用的,当你想在链中组合方法调用时:
myObject
.ChangeThis()
.ChangeThat()
.ChangeSomethingElse();
我认为,StringBuilder
是一个非常好的例子:
sb
.AppendLine("1")
.AppendChar('2')
.AppendLine()
.ToSting();
相同的API具有来自实体框架的模型配置classes:
Property(_ => _.Name)
.HasColumnName("name")
.HasMaxLength(64)
.IsRequired();
因此,有时这是非常方便的方法来调用方法 想象一下,上面的代码在第一种情况下会如何看待:
sb.AppendLine("1");
sb.AppendChar('2');
sb.AppendLine();
sb.ToSting();
可悲的是,不是吗?