C# 为什么在C中为DBBool(三态)实现返回重载运算符时出现新问题#
如果您在返回时查找一些新的重载运算符(逻辑运算符C# 为什么在C中为DBBool(三态)实现返回重载运算符时出现新问题#,c#,tri-state-logic,C#,Tri State Logic,如果您在返回时查找一些新的重载运算符(逻辑运算符|,&,!)。我相信这是没有必要的,也是一种小小的记忆浪费。DBBool是一个结构,当它被传递到一个方法中时,会生成一个副本,所以没有理由这样做 // Logical negation operator. Returns True if the operand is False, Null // if the operand is Null, or False if the operand is True. public static DBBo
|
,&
,!
)。我相信这是没有必要的,也是一种小小的记忆浪费。DBBool是一个结构,当它被传递到一个方法中时,会生成一个副本,所以没有理由这样做
// Logical negation operator. Returns True if the operand is False, Null
// if the operand is Null, or False if the operand is True.
public static DBBool operator !(DBBool x)
{
return new DBBool(-x.value);
}
// Logical AND operator. Returns False if either operand is False,
// Null if either operand is Null, otherwise True.
public static DBBool operator &(DBBool x, DBBool y)
{
return new DBBool(x.value < y.value ? x.value : y.value);
}
// Logical OR operator. Returns True if either operand is True,
// Null if either operand is Null, otherwise False.
public static DBBool operator |(DBBool x, DBBool y)
{
return new DBBool(x.value > y.value ? x.value : y.value);
}
//逻辑求反运算符。如果操作数为False,则返回True;如果为Null,则返回Null
//如果操作数为Null,则为False(如果操作数为True)。
公共静态DBBool操作符!(dbboolx)
{
返回新的DBBool(-x.value);
}
//逻辑与运算符。如果任一操作数为False,则返回False,
//如果任一操作数为Null,则为Null,否则为True。
公共静态DBBool运算符&(DBBool x,DBBool y)
{
返回新的DBBool(x.valuey.value?x.value:y.value);
}
应该是这样的,不需要更新
public static DBBool operator !(DBBool x)
{
if (x.value > 0) return False;
if (x.value < 0) return True;
return Null;
}
public static DBBool operator &(DBBool x, DBBool y)
{
return x.value < y.value ? x : y;
}
public static DBBool operator |(DBBool x, DBBool y)
{
return x.value > y.value ? x : y;
}
公共静态DBBool操作符!(dbboolx)
{
如果(x.value>0)返回False;
如果(x.value<0)返回True;
返回Null;
}
公共静态DBBool运算符&(DBBool x,DBBool y)
{
返回x.valuey.value?x:y;
}
1.同意。2.结构是不可变的,我同意,但我不同意其余的。我可以改变一个字符串参数并返回它。我已经尝试了修改过的代码,它工作正常。@hIpPy:你不能改变字符串,而且字符串也不是结构。真的不清楚您的意思。@hlpPy重新分配参数与改变参数值不同。不,不能对字符串进行变异。从技术上讲,说“结构是不可变的”是错误的:它们几乎总是应该是可变的,但有些(很少)是可变的——这通常会导致大量的混乱。我的意思是说我可以更改方法中的字符串参数并返回它,而字符串是不可变的。没有什么能阻止我那样做。@hlpPy right;但这与问题无关。在这种情况下,新字符串的值需要来自某个地方;这就是“新”所做的:赋予它价值1。同意。2.结构是不可变的,我同意,但我不同意其余的。我可以改变一个字符串参数并返回它。我已经尝试了修改过的代码,它工作正常。@hIpPy:你不能改变字符串,而且字符串也不是结构。真的不清楚您的意思。@hlpPy重新分配参数与改变参数值不同。不,不能对字符串进行变异。从技术上讲,说“结构是不可变的”是错误的:它们几乎总是应该是可变的,但有些(很少)是可变的——这通常会导致大量的混乱。我的意思是说我可以更改方法中的字符串参数并返回它,而字符串是不可变的。没有什么能阻止我那样做。@hlpPy right;但这与问题无关。在这种情况下,新字符串的值需要来自某个地方;这就是“new”所做的:给它一个值为什么你认为任何内存都被浪费了?@JonSkeet:我明白了,new会在堆栈上初始化一个“DBBool”值,并且在方法退出时会回收内存。为什么你认为任何内存都被浪费了?@JonSkeet:我明白了,new将在堆栈上初始化一个“DBBool”值,并在方法退出时回收内存。