隐式强制转换导致Unity中的StackOverflowException

问题描述 投票:-3回答:1

我有一个称为BoolReference的自定义类。我正在使用隐式强制转换将布尔值分配给此类,而不调用其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.Value = false,那么一切正常

c# unity3d exception stack-overflow
1个回答
0
投票

实际上在转换运算符中返回BoolReference对我有用:

using System;
using System.Collections;
using System.Collections.Generic;

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
© www.soinside.com 2019 - 2024. All rights reserved.