C#中的扩展方法如何为父变量(即“ this”变量)赋值

时间:2019-07-30 11:01:28

标签: c# winforms

我有一个用于扩展方法的代码,看起来很像行

ifstream

这是我拥有的扩展类,但我需要的是

parent class
{
   int i = 9; // the value was i was 9;
   i = i.Add(2); // here 9 + 2
   Console.WriteLine(i); // it is printing 11
}

extension class
{
   public static int Add(this int firstInteger, int secondInteger)
   {
      return (firstInteger + secondInteger);
   }
}

我找不到解决方法,请推荐解决方案。

1 个答案:

答案 0 :(得分:7)

首先,我强烈建议您这样做。这很违反直觉。

但是从C#7.2开始,这种 是可能的-仅适用于值类型-使用ref扩展方法。只需将第一个参数更改为具有ref修饰符,然后为其分配:

using System;

public static class Int32Extensions
{
    public static void Add(ref this int x, int y)
    {
        x = x + y;
    }

}

class Test
{
    static void Main()
    {
        int i = 9;
        i.Add(2);
        Console.WriteLine(i); // 11
    }
}

i.Add(2)调用是隐式的:

Int32Extensions.Add(ref i, 2);

如果您尝试在不是变量的对象上调用它,它将失败。

但是对于许多C#开发人员来说,这确实是令人惊讶的行为,因为ref是隐式的。对于引用类型也无效。