gpt4 book ai didi

C# 使用扩展方法更改值

转载 作者:行者123 更新时间:2023-11-30 13:21:53 26 4
gpt4 key购买 nike

如果我有以下扩展方法:

internal static class Extensions
{
public static void Increase(this uint value)
{
value += 1;
}

public static void Decrease(this uint value)
{
if (value > 0) value -= 1;
}
}

为什么这不会导致将 i 更改为 1?

uint i = 0;
i.Increase();

最佳答案

参数是按值传递的,仅此而已。在这方面,扩展方法没有什么特别之处。它相当于:

Extensions.Increase(i);

您需要该方法通过引用(使用 ref)传递第一个参数,这样才能产生任何效果……无论如何,扩展方法都禁止这样做。

因此,虽然您可以编写一个允许您调用它的方法:

Extensions.Increase(ref i);

您将无法将其作为扩展方法。

另一种方法是让方法返回一个值,此时您可以:

i = i.Increase();

如果您对按引用传递与按值传递语义不是很清楚,您可能需要阅读我的 article on the topic .

关于C# 使用扩展方法更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35164152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com