Неявное приведение вызвало StackOverflowException в Unity - PullRequest
0 голосов
/ 13 января 2020

У меня есть собственный класс с именем BoolReference. Я использую неявное приведение, чтобы присвоить значения bool этому классу без вызова его свойства Value. Вот код, где второй метод приведения вызывает переполнение стека и может кто-нибудь помочь мне это исправить?

[System.Serializable]
public class BoolReference {
[SerializeField]
private BoolVariable Variable;

public bool Value {
    get => Variable.Value;
    set {
        Variable.Value = value;
    }
}

public static implicit operator bool(BoolReference bRef) => bRef.Value;
public static implicit operator BoolReference(bool b) => b;

}

Это использование, которое вызывает исключение

public BoolReference IsInPlay;

void Awake() {
    IsInPlay = false;    
}

Если я пишу IsInPlay. Значение = ложь, тогда все в порядке

1 Ответ

1 голос
/ 13 января 2020

На самом деле возврат BoolReference в операторе преобразования работал для меня:

using System;

public class BoolVariable {
    public bool Value;
}

public class BoolReference {

private BoolVariable Variable;

public bool Value {
    get => Variable.Value;
    set {
        Variable.Value = value;
    }
}

public static implicit operator bool(BoolReference bRef) => bRef.Value;
public static implicit operator BoolReference(bool b){
    BoolReference br = new BoolReference();
    br.Variable = new BoolVariable();
    br.Value=b;
    return br;
}

}   
public class Program
{
    static BoolReference r;
    public static void Main()
    {
        r = false;
        Console.WriteLine(r);
        r = true;
        Console.WriteLine(r);
    }
}

... , который печатает :

false
true
...