由于一些奇怪的原因,C#有二进制类型' bool'但似乎缺乏类似的一元价值类型。
要解决这个问题,我目前将一元类型表示为布尔值并将它们设置为始终为假,但当然这会在以后出现错误的可能性,如果我忘记并将其设置为true会怎么样?理想情况下会有一个名为uool的值类型,我可以这样声明:
uool u;
我不需要为它分配值,因为它只能有一个可能的值。我也不需要对它进行测试,因为它已经定局了它的价值。
假设C#(?)中没有这样的值类型,我可以制作一个吗?或者也许有一个合适的解决方法并不涉及某种讨厌的黑客攻击?
编辑:似乎我的问题超过了某些人的头脑,这是我的错,我没有说清楚,所以这里有一个应该有用的代码示例:
[Serializable]
class CallType
{
public string Address {get;set;}
public uool Calls;
public int NumberOpen {get;}
}
编辑:添加了Serializable属性以显示用例。例如:
void SendCall(string message, int priority, CallType type)
{
BinaryStream bs = ....
//serialize CallType to stream
}
答案 0 :(得分:3)
我不需要为它赋值,因为它只能有一个可能的值。
然后它或者是常量,或者在你的代码中是多余的。
但是,无论“一元值类型”听起来有多奇怪,您始终只能使用带有单个枚举项的枚举:
public enum Useless
{
TheOnlySemanticallyCorrectValue
}
Useless u = Useless.TheOnlySemanticallyCorrectValue;
这种结构在某些情况下可能完全合法。举一个例子:想象一个字段需要在通信协议或固定布局数据结构中声明,在原始设计时允许只保留一个值。但是,将来协议可能会被扩展,而似乎“无用”(并且仅仅作为占位符)会变成非常有用的。
注意:为了简单起见,人们可以在C#中合法地写u = 1024;
这一事实可能会被遗忘。
答案 1 :(得分:3)
我认为你所要求的是不可能的。
但你可以使用常数。
const string s = "I'm a constant and I'll not change";
但变量这个词本身就说明了一切。 变化
但是为了你的缘故怎么样:
struct Uoolean { }
空结构?无论你用它创造什么样的物体,都不会有任何改变。
答案 2 :(得分:1)
我想说bool可以完美地完成这项工作,具有以下惯例:
或者你可以使用bool?变量,具有Value参数,否则为null。