对于赋值,我必须使用struct在C#中编写Tribool类.只有三种可能的tribools,True,False和Unknown,我将这些声明声明为静态只读.像这样:
public static readonly Tribool True, False, Unknown;
Run Code Online (Sandbox Code Playgroud)
我需要我的默认构造函数来提供一个False Tribool,但我不知道如何解决这个问题.我已经尝试了Tribool() { this = False; },Tribool() { False; }但我一直得到一个"结构不能包含显式无参数构造函数"错误.
赋值指定Tribool的默认构造函数应该提供False Tribool.否则,用户不应该能够创建任何其他Tribools.我现在还不知道该怎么做.任何建议将不胜感激.谢谢.
Eri*_*ert 10
只是为Jason的答案添加一点:仔细设计你的结构,以便默认值是有意义的.例如,考虑Nullable<T>结构.当你说时,期望的行为是
Nullable<int> x = new Nullable<int>(); // default constructor
Run Code Online (Sandbox Code Playgroud)
结果值在逻辑上为空.我们怎么做?结构定义如下:
struct Nullable<T>
{
private readonly T value;
private readonly bool hasValue;
public Nullable(T value)
{
this.value = value;
this.hasValue = true;
}
...
Run Code Online (Sandbox Code Playgroud)
因此,当默认构造函数运行时,hasValue会自动设置为false,并且value将设置为默认值T.将hasValue设置为false的nullable视为null,这是所需的行为.这就是为什么bool是hasValue而不是isNull.
正如错误告诉你的那样,你绝对不能拥有一个struct的无参数实例构造函数.请参阅C#3.0语言规范的§11.3.8:
与类不同,不允许结构体声明无参数实例构造函数.
该语言为您提供了一个默认构造函数.此构造函数返回结构的值,其中字段已设置为其默认值.
现在,您可以做的是使用struct的默认值表示False值.我会把细节留给你.
| 归档时间: |
|
| 查看次数: |
4713 次 |
| 最近记录: |