在 C# 中创建实例作为引用传递的扩展方法真的不可能吗?
这是一个示例 VB.NET 控制台应用程序:
Imports System.Runtime.CompilerServices
Module Module1
  Sub Main()
    Dim workDays As Weekdays
    workDays.Add(Weekdays.Monday)
    workDays.Add(Weekdays.Tuesday)
    Console.WriteLine("Tuesday is a workday: {0}", _ 
      CBool(workDays And Weekdays.Tuesday))
    Console.ReadKey()
  End Sub
End Module
<Flags()> _
Public Enum Weekdays
  Monday = 1
  Tuesday = 2
  Wednesday = 4
  Thursday = 8
  Friday = 16
  Saturday = 32
  Sunday = 64
End Enum
Module Ext
  <Extension()> _
  Public Sub Add(ByRef Value As Weekdays, ByVal Arg1 As Weekdays) 
    Value = Value + Arg1
  End Sub
End Module
注意 Value 参数是通过 ByRef 传递的。
并且(几乎)在 C# 中相同:
using System;
namespace CS.Temp
{
  class Program
  {
    public static void Main()
    {
      Weekdays workDays = 0;
      workDays.Add(Weekdays.Monday); // This won't work
      workDays.Add(Weekdays.Tuesday);
      // You have to use this syntax instead...
      // workDays = workDays | Weekdays.Monday;
      // workDays = workDays | Weekdays.Tuesday;
      Console.WriteLine("Tuesday is a workday: {0}", _ 
        System.Convert.ToBoolean(workDays & Weekdays.Tuesday));
      Console.ReadKey();
    }
  }
  [Flags()]
  public enum Weekdays : int
  {
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
  }
  public static class Ext
  {
    // Value cannot be passed by reference? 
    public static void Add(this Weekdays Value, Weekdays Arg1) 
    {
      Value = Value | Arg1;
    }
  }
}
Add扩展方法在 C# 中不起作用,因为我不能使用关键字ref。有什么解决方法吗?