在泛型函数中分配类属性

时间:2014-06-20 21:58:47

标签: c# lambda

我有以下代码。

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不能用于对象属性。)

2 个答案:

答案 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);