在泛型函数中赋值类属性
本文关键字:属性 赋值 泛型 函数 | 更新日期: 2023-09-27 18:09:42
我有以下代码。
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
不能用于对象属性)
让我们把泛型拿出来。假设类型为int。你会有:
void DoSth(int curr, int prev)
{
if (!EqualityComparer<int>.Default.Equals(curr, prev))
{
prev = curr;
.....
}
DoSth(a.Prop1, b.Prop1);
为什么你期望"prev = curr"影响方法范围之外的任何东西?你将一个局部变量赋值给另一个局部变量。
假设这实际上是你想要的,我怀疑你想在参数上使用ref关键字。
我可能过分简化了它,但是像这样的东西不会工作吗?
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);