2016-02-06 2 views
4

Мне нужно использовать определенный метод для выполнения работы - это не может быть какой-либо другой метод или сборка. Метод принимает следующие параметры:C# - Конвертировать из bool в bool *

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

Я пытаюсь использовать ложь для параметра «Ison», но Visual Studio говорит «Аргумент 1: не удается преобразовать из типа„BOOL“до„BOOL *“».

Как конвертировать/использовать bool * так, чтобы он действовал надлежащим образом?

Заранее спасибо.

Редактировать: Это не дубликат Usefulness of bool* in C#, потому что я спрашиваю конкретно о преобразовании из указателя на тип и сам тип. Кроме того, упомянутая нить запрашивает использование bool *, но напрямую не отвечает на мой вопрос.

+1

Возможный дубликат [Полезность bool \ * в C#] (http://stackoverflow.com/questions/3222676/usefulness-of-bool-in-c-sharp) – mason

+0

Вы отметили это с помощью C#, когда вы имели в виду C++? –

+0

@dasblinkenlight Некоторые из них, но этот метод просто отмечен небезопасным. – Scott

ответ

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 
    } 

} 

Обратите внимание, как метод позволил изменить переменную через указатель.

+0

Простой и понятный. Также немного научил меня использованию небезопасного ключевого слова. Спасибо – 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

Обратите внимание, возможно, придется использовать небезопасные параметры контекста/компилятора для этой работы, но предположим, что вы уже от того, что вы сказали.

+0

Хотел бы я отметить это как решение, а также хорошие ссылки и с простым примером. спасибо – Scott