我需要使用特定的方法来完成工作 - 它不能是任何其他方法或程序集。该方法采用以下参数:
void method(bool* isOn) {/* Some code... */}
我尝试对参数'isOn'使用false,但Visual Studio告诉“参数1:无法从类型'bool'转换为'bool *'”。
如何转换/使用bool *以使其正常运作?
提前致谢。
编辑:这不是Usefulness of bool* in C#的重复,因为我特别询问从指针到类型和类型本身的转换。另外,提到的线程要求使用bool *,但不能直接回答我的问题。
答案 0 :(得分: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
}
}
注意如何允许该方法通过指针更改变量。
答案 1 :(得分:3)
bool *是指向bool类型变量的指针,而不是bool值类型。意味着你需要传递的是对布尔变量的内存引用,而不是布尔值类型本身:
https://msdn.microsoft.com/en-us/library/z19tbbca.aspx
当你调用方法时,你应该做的是:
bool isOn=false;
method(&isOn);
&安培; address运算符返回参数似乎需要的内存地址引用。
https://msdn.microsoft.com/en-us/library/sbf85k1c.aspx
注意,您可能需要使用不安全的上下文/编译器选项来实现此功能,但假设您已经来自您所说的内容。