一元值类型

时间:2014-04-11 13:44:40

标签: c# .net

由于一些奇怪的原因,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
}

3 个答案:

答案 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可以完美地完成这项工作,具有以下惯例:

  • false:变量没有值
  • true:变量的值为

或者你可以使用bool?变量,具有Value参数,否则为null。