加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#用扩展方法改变一个值

发布时间:2020-12-15 19:26:43 所属栏目:百科 来源:网络整理
导读:如果我有以下扩展方法: 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
如果我有以下扩展方法:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读