c# - 覆盖 C# 结构中的默认值

标签 c# struct

对于一项作业,我必须使用结构在 C# 中编写一个 Tribool 类。只有三种可能的 tribools,True、False 和 Unknown,我将它们声明为静态只读。像这样:

public static readonly Tribool True, False, Unknown;

我需要我的默认构造函数来提供 False Tribool,但我不确定该怎么做。我试过 Tribool() { this = False; }Tribool() { False; } 但我不断收到“Structs cannot contain explicit parameterless constructors”错误。

作业指定 Tribool 的默认构造函数应提供 False Tribool。否则,用户不应该能够创建任何其他 Tribools。我现在真的不知道该怎么办。任何建议将不胜感激。谢谢。

最佳答案

只是为 Jason 的回答添加一点:仔细设计您的结构,以便默认值有意义。例如,考虑 Nullable<T>结构。期望的行为是当你说

Nullable<int> x = new Nullable<int>(); // default constructor

结果值在逻辑上为空。我们该怎么做?该结构定义如下:

struct Nullable<T> 
{
    private readonly T value;
    private readonly bool hasValue;
    public Nullable(T value)
    { 
        this.value = value;
        this.hasValue = true;
    }
    ...

因此,当默认构造函数运行时,hasValue 自动设置为 false,value 设置为默认值 T。hasValue 设置为 false 的 nullable 被视为 null,这是所需的行为。这就是为什么 bool 是 hasValue 而不是 isNull 的原因。

关于c# - 覆盖 C# 结构中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2181906/

相关文章:

javascript - 为 webgl 准备二进制数据并将其发送到 javascript

c# - Html.HiddenFor 绑定(bind)到错误的元素

c# - 我已经创建了一个 WCF 服务,现在我想从引用中调用它,但为什么会出现 InvalidOperationException?

c++ - 通过成员初始化列表初始化结构体

c - qsort 结构数组降序

c# - 在 .net 中编写 CSV 文件

C# Dice Times 每个数字被滚动

c - 结构体和符号数组

c++ - 如何使用未初始化的指针修复 C++ 中的 C4700 警告?

c - 将 c 结构指针传递给 x86-32 程序集将自动取消引用