在swift中,只需调用变量.toggle()即可切换Boolean.

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;
    }
} 

然而,它不起作用,我怀疑这与C中的bool是值类型有关,因为它们是swift中的引用类型.

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

推荐答案

您可以通过引用接受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

Csharp相关问答推荐

C#将参数传递给具有变化引用的变量

如何保持主摄像头视角保持一致?

在发布表单时绑定包含附加(嵌套)列表的对象列表的正确语法是什么

将XPS转换为PDF C#

如何忽略API JSON响应中的空字符串?

RabbitMQ群集的MassTransit配置问题

MSTest--将消息直接写入StdOut和使用TestContext有什么不同?

如何将%{v_扩展}转换为%{v_扩展}>>

JsonPath在Newtonsoft.Json';S实现中的赋值

{ or ; expected error如何解决此问题

EF Core 7-忽略模型绑定中的虚拟属性

在平行内使用跨度.用于循环

流畅的验证--如何为属性重用规则?

如何使用.NET 8.0中新的CompositeFormat类?

WPF如何获取有关从一个视图模型更改另一个视图模型的信息

将文本从剪贴板粘贴到RichTextBox时,新文本不会在RichTextBox ForeColor中着色

我想我必须手动使用res1(字符串形式的PowerShell哈希表)

测试单个对象是否与Func<;T,bool>;匹配

从实例扩展中调用类型的扩展方法

带自定义比较器的OrderBy执行速度比默认比较器慢得多