Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有初始无效字段的结构_C#_Struct - Fatal编程技术网

C# 具有初始无效字段的结构

C# 具有初始无效字段的结构,c#,struct,C#,Struct,我试图创建一个结构,它有两个字段,我可以在创建后直接检查它们是否有效。由于默认情况下这两个字段是0,如果它们是-1,我想检查它们是否无效 public struct InputCodeSet { public int primary; public int secondary; public InputCodeSet(int primary = -1, int secondary = -1) { this.primary = primary;

我试图创建一个结构,它有两个字段,我可以在创建后直接检查它们是否有效。由于默认情况下这两个字段是
0
,如果它们是
-1
,我想检查它们是否无效

public struct InputCodeSet
{
    public int primary;
    public int secondary;


    public InputCodeSet(int primary = -1, int secondary = -1)
    {
        this.primary = primary;
        this.secondary = secondary;
    }

    public bool IsValid
    {
        get { return primary > -1 && primary < InputCode.MAX && secondary > -1 && secondary < InputCode.MAX; }
    }
}

结构有单独的默认无参数构造函数,调用这些构造函数时,即使所有参数都是可选的,也不会使用参数调用构造函数重载。因此,在不向构造函数传递任何参数的情况下创建结构将调用其默认构造函数并使其字段初始化为0,从而完全忽略具有可选参数的构造函数

从:

如果使用默认的无参数构造函数实例化struct对象,则会根据其默认值分配所有成员

也许您可以将这些字段设置为null,并检查null而不是-1:

public struct InputCodeSet
{
    public int? primary;
    public int? secondary;

    public InputCodeSet(int? primary = null, int? secondary = null)
    {
        this.primary = primary;
        this.secondary = secondary;
    }

    public bool IsValid
    {
        get { return primary != null && primary < InputCode.MAX && secondary != null && secondary < InputCode.MAX; }
    }
}
public结构输入代码集
{
公共int?小学;
公共int-中学;
公共输入代码集(int?primary=null,int?secondary=null)
{
this.primary=primary;
this.secondary=secondary;
}
公共布尔是有效的
{
获取{return primary!=null&&primary
结构有单独的默认无参数构造函数,调用这些构造函数时,即使所有参数都是可选的,也不会使用参数调用构造函数重载。因此,在不向构造函数传递任何参数的情况下创建结构将调用其默认构造函数并使其字段初始化为0,从而完全忽略具有可选参数的构造函数

从:

如果使用默认的无参数构造函数实例化struct对象,则会根据其默认值分配所有成员

也许您可以将这些字段设置为null,并检查null而不是-1:

public struct InputCodeSet
{
    public int? primary;
    public int? secondary;

    public InputCodeSet(int? primary = null, int? secondary = null)
    {
        this.primary = primary;
        this.secondary = secondary;
    }

    public bool IsValid
    {
        get { return primary != null && primary < InputCode.MAX && secondary != null && secondary < InputCode.MAX; }
    }
}
public结构输入代码集
{
公共int?小学;
公共int-中学;
公共输入代码集(int?primary=null,int?secondary=null)
{
this.primary=primary;
this.secondary=secondary;
}
公共布尔是有效的
{
获取{return primary!=null&&primary
感谢您提供文档链接。这是一个信息丰富的回答+1@BoltClock我不知道我可以让它们在网络4中为空。这可能有效,但IsValid在任何情况下都返回False。@Baddingtoncat:new InputCodeSet(1,2)。IsValid(使用构造函数)和
new InputCodeSet{primary=1,secondary=2}。IsValid
(使用初始值设定项语法)为我返回true。@BoltClock Ok,现在按照您的示例运行。谢谢!谢谢你的文档链接。这是一个信息丰富的回答+1@BoltClock我不知道我可以让它们在网络4中为空。这可能有效,但IsValid在任何情况下都返回False。@Baddingtoncat:new InputCodeSet(1,2)。IsValid(使用构造函数)和
new InputCodeSet{primary=1,secondary=2}。IsValid
(使用初始值设定项语法)为我返回true。@BoltClock Ok,现在按照您的示例运行。谢谢!评论不用于扩展讨论;在中继续。评论不用于扩展讨论;继续。