C# - 从bool转换为bool*

4

我需要使用特定的方法来完成任务 - 不能使用其他方法或程序集。该方法需要以下参数:

void method(bool* isOn) {/* Some code... */}

我试图在'isOn'参数中使用false,但Visual Studio告诉我:“Argument 1: cannot convert from type 'bool' to 'bool*'”。

如何转换/使用bool*以使其适当地起作用?

提前感谢。

编辑:这不是“C#中bool*的用处”的重复,因为我特别询问了指针类型和类型本身之间的转换。此外,所提到的线程询问bool*的用途,但并没有直接回答我的问题。


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - mason
你是不是打算给这个标签加上C#,但实际上你想要的是C++? - Steve Wellens
@dasblinkenlight 有些是不安全的,但这个方法只是被标记为不安全。 - Scott
@Steve Wellens 不好意思,我指的是C#。 - Scott
2个回答

4

由于常量没有地址,所以您无法传递false

为了传递指向false的指针,需要创建一个变量,将其设置为false,并使用&运算符获取变量的地址:

unsafe class Program {

    static void foo(bool* b) {
        *b = true;
    }

    static void Main(string[] args) {
        bool x = false;
        Console.WriteLine(x); // Prints false
        foo(&x);
        Console.WriteLine(x); // Prints true
    }

}

请注意该方法通过指针允许更改变量的值。

简单明了,也教会了我一些关于unsafe关键字的用法。谢谢 - Scott

3

bool*是指向bool类型变量的指针,而不是bool值类型。 这意味着您需要传递布尔变量的内存引用,而不是布尔值类型本身:

https://msdn.microsoft.com/en-us/library/z19tbbca.aspx

当您调用该方法时,您应该能够执行以下操作:

bool isOn=false;

method(&isOn);   

& 地址操作符返回参数需要的内存地址引用。

https://msdn.microsoft.com/en-us/library/sbf85k1c.aspx

请注意,您可能需要使用不安全的上下文/编译器选项才能使其工作,但根据您的说法,我们假设您已经在使用这些选项。


我希望我也能将这个标记为解决方案——它有很好的参考资料和简单的示例。谢谢。 - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接