隐式转换在 Unity 中导致 StackOverflowException
Implicit cast caused StackOverflowException in Unity
我有一个名为 BoolReference 的自定义 Class。
我正在使用隐式转换为这个 class 分配 bool 值,而不调用它的值 属性。
这是第二个转换方法导致堆栈溢出的代码,有人可以帮我解决这个问题吗?
[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,那么一切正常
实际上在转换运算符中返回一个 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);
}
}
...which prints:
false
true
我有一个名为 BoolReference 的自定义 Class。 我正在使用隐式转换为这个 class 分配 bool 值,而不调用它的值 属性。 这是第二个转换方法导致堆栈溢出的代码,有人可以帮我解决这个问题吗?
[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,那么一切正常
实际上在转换运算符中返回一个 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);
}
}
...which prints:
false true