You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为struct(结构体)添加多个重载构造函数?

报错原因分析
  • 构造函数链调用语法错误:C# 中调用当前结构体的其他构造函数,需要写在构造函数签名的尾部,使用 : this(参数列表) 的语法,不能写在构造函数的内部代码块中。你将 this(a, null) 写在构造函数大括号内,编译器会将其识别为普通方法调用,而不存在名为 this 的方法,因此触发「Method name expected」报错。
  • 参数类型不匹配:字段 b 是 int 类型,属于非可空值类型,不能传入 null 作为参数,该语法本身不合法。
  • 不满足结构体构造函数赋值规则:C# 要求结构体的所有实例构造函数,必须在返回前为所有字段完成赋值。你的单参数构造函数既没有手动为 a、b 赋值,也没有正确调用其他构造函数完成赋值,因此触发字段未完全赋值的报错;同时你在未完成所有字段赋值的前提下尝试在构造函数内部使用 this,就会触发 this 对象不可用的报错。
正确实现方案

你可以任选以下任意一种方式实现结构体的多构造函数:

方案1:使用正确的构造函数链语法

struct test 
{
    public int a;
    public int b;

    // 构造函数签名后加 : this(参数) 调用双参数构造,给b传入默认值0
    public test(int a) : this(a, 0)
    {
    }

    public test(int a, int b) 
    {
        this.a = a;
        this.b = b;
    }
}

方案2:单参数构造函数直接为所有字段赋值

struct test 
{
    public int a;
    public int b;

    public test(int a) 
    {
        this.a = a;
        this.b = 0; // 手动给所有字段赋值即可
    }

    public test(int a, int b) 
    {
        this.a = a;
        this.b = b;
    }
}

方案3:使用参数默认值简化实现(C# 4.0及以上版本支持)

如果没有特殊逻辑要求,可以直接给构造函数参数设置默认值,只用一个构造函数即可覆盖两种调用场景:

struct test 
{
    public int a;
    public int b;

    // b的默认值设为0,调用时可以只传a,也可以同时传a和b
    public test(int a, int b = 0) 
    {
        this.a = a;
        this.b = b;
    }
}

内容的提问来源于stack exchange,提问作者Recessive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:48:02