C# - 从布尔值转换为布尔值*

本文关键字:布尔值 转换 | 更新日期: 2023-09-27 18:33:30

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

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

我尝试对参数"isOn"使用 false,但 Visual Studio 告诉"参数 1:无法从类型'bool'转换为'bool*'"。

如何转换/使用 bool* 以便它适当地发挥作用?

提前谢谢。

编辑:这不是 C# 中 bool* 的有用性的副本,因为我专门询问从指针到类型和类型本身的转换。另外,提到的线程要求使用 bool*,但没有直接回答我的问题。

C# - 从布尔值转换为布尔值*

你不能传递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
    }
}

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

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

请注意,您可能需要使用不安全的上下文/编译器选项才能正常工作,但假设您已经从您所说的内容中脱颖而出。