LaVOZs

The World’s Largest Online Community for Developers

'; c# - Implicit cast caused StackOverflowException in Unity - LavOzs.Com

I have a custom Class called BoolReference. I am using implicit cast to assign bool values to this class without calling it's Value property. Here is the code where second cast method causes stack overflow and can someone help me to fix this?

[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;

}

This is usage which causes the exception

public BoolReference IsInPlay;

void Awake() {
    IsInPlay = false;    
}

If i write IsInPlay.Value = false, then everything is ok

Actually returning a BoolReference in the conversion operator worked for me:

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);
    }
}

...which prints:

false
true
Related
How to cast int to enum?
Direct casting vs 'as' operator?
C# Interfaces. Implicit implementation versus Explicit implementation
How to cause stack overflow and heap overflow in python
StackOverflowException with DataGridView
Implicit cast dynamic to DateTime? and op_Equality
Casting Deriving Class as Base Class