我有以下代码。
A a = new A(....); .... a.Prop1 = ...
B b = new B(....); .... b.Prop1 = ...
DoSth(a.Prop1, b.Prop1);
void DoSth<T>(T curr, T prev)
{
if (!EqualityComparer<T>.Default.Equals(curr, prev))
{
prev = curr; // prev changed, however b is not changed.
....
callSomeFn(b);
.....
}
传递分配的lambda应该有效。
void DoSth<T>(T curr, T prev, Action assign)
{
if (!EqualityComparer<T>.Default.Equals(curr, prev))
{
assign();
.....
}
DoSth(a.Prop1, b.Prop1, ()=>a.Prop1 = b.Prop1);
然而,它看起来很麻烦。有没有更好的方法呢? (ref
不能用于对象属性。)
答案 0 :(得分:1)
让我们把仿制药拿出来。假设类型是int。你有:
void DoSth(int curr, int prev)
{
if (!EqualityComparer<int>.Default.Equals(curr, prev))
{
prev = curr;
.....
}
DoSth(a.Prop1, b.Prop1);
为什么您会期望“prev = curr”影响方法范围之外的任何内容?您将一个局部变量分配给另一个局部变量的值。
假设这实际上是你想要的,我怀疑你想在参数上使用ref关键字。
答案 1 :(得分:1)
我可能过于简单了,但是不会有这样的工作吗?
T DoSth<T>(T curr, T prev)
{
if (!EqualityComparer<T>.Default.Equals(curr, prev))
{
return curr;
}
return prev
}
a.Prop1 = DoSth(a.Prop1, b.Prop1);