代码之家  ›  专栏  ›  技术社区  ›  Ahmad

是否可以通过对c#中的同一变量调用扩展方法来更改布尔值?

  •  3
  • Ahmad  · 技术社区  · 2 年前

    在swift中,可以切换 Boolean 通过简单的调用 .toggle() 关于变种。

    var isVisible = false
    isVisible.toggle()  // true
    

    我想在C#中创建相同的功能,所以我在“bool”上写了一个扩展方法

    public static class Utilities {
        public static void Toggle(this bool variable) {
            variable = !variable;
            //bool temp = variable;
            //variable = !temp;
        }
    } 
    

    然而,它不起作用,我怀疑这与 bool 在C#中是值类型,其中as是swift中的引用类型。

    有没有办法在C#中实现相同的切换函数?

    1 回复  |  直到 2 年前
        1
  •  14
  •   wohlstad    2 年前

    你可以通过接受 this bool 对象 通过参考 :

    public static class Utilities
    {
        //-----------------------------vvv
        public static void Toggle(this ref bool variable)
        {
            variable = !variable;
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            bool b1 = true;
            Console.WriteLine("before: " + b1);
            b1.Toggle();
            Console.WriteLine("after: " + b1);
        }
    }
    

    输出

    before: True
    after: False
    

    笔记 此功能仅在C#7.2中可用。看见 here .