1

是否可以在静态扩展方法中修改 this/focus 变量?

例如:

public static class AnimExtensions
{
    public static int anim(this float f, float to, float time)
    {
        return Animation.Start(a => f = a, f, to, time);
    }
}

我想通过在“this”变量上使用 lambda 函数来使用扩展名来调用 Animation.Start 方法。扩展方法中不允许使用 this 关键字,但是是否有另一种以这种方式访问​​/使用变量的方法?

4

2 回答 2

8

您当然可以修改参数 - 但它不会有任何效果,因为参数是按常规方法按值传递的。

您不能将扩展方法的第一个参数声明为refor out,这是它产生效果所必需的。

于 2012-09-05T18:27:17.317 回答
1

我不确定你在问什么。方法的第一个参数的类型是什么Animation.Start

类型float( System.Single) 是不可变的,因此您无法修改f对象。您可以分配f给一个新对象(例如f = 3.14F;f++;),但正如 Jon Skeet 在他的回答中解释的那样,这是没用的(ref/out不能与 结合this)。

如果您在可变引用类型上创建扩展方法,例如List<>,则可以修改“this”对象,如下所示:

public static void AbsAll(this List<float> list)
{
  for (int i = 0; i < list.Count; ++i)
    list[i] = Math.Abs(list[i]);
}

list当然,分配给新对象仍然没有用。

于 2012-09-05T19:00:33.473 回答