是否可以在静态扩展方法中修改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函数来调用使用float的扩展的Animation.Start方法。扩展方法中不允许使用this关键字,但是还有另一种以这种方式访问/使用变量的方法吗?
答案 0 :(得分:8)
您当然可以修改参数 - 但它不会产生任何影响,因为参数是按照常规方法按值传递的。
您无法将扩展方法的第一个参数声明为ref
或out
,这是它产生效果所需的参数。
答案 1 :(得分: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
分配给新对象仍然没有用。