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

反编译DLL项目出现CS0460泛型约束编译错误求助

解决CS0460编译错误:重写方法重复指定泛型约束问题

错误提示

CS0460 Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly, except for either a 'class', or a 'struct' constraint. QuestradeAPI.Net

问题定位

错误出现在MsgBracketOrderImpactRequest及其内部类BracketOrderComponent的AcceptVisitor重写方法中。基类IVisitable已经为AcceptVisitor<Visitor>方法定义了where Visitor : IVisitor的泛型约束,C#编译器规定重写方法时会自动继承基类的泛型约束,无需再次声明,重复指定就会触发CS0460错误。

解决方案

移除两个重写方法中的where Visitor : IVisitor约束即可,具体修改如下:

修改后的MsgBracketOrderImpactRequest.AcceptVisitor方法

internal override void AcceptVisitor<Visitor>(Visitor v)
{
    v.StartObject<MsgBracketOrderImpactRequest>(this);
    v.VisitBasicField<string>(ref this.m_accountNumber, "accountNumber", false);
    v.VisitBasicField<ulong>(ref this.m_symbolId, "symbolId", false);
    v.VisitBasicField<string>(ref this.m_primaryRoute, "primaryRoute", false);
    v.VisitBasicField<string>(ref this.m_secondaryRoute, "secondaryRoute", false);
    v.VisitObjectArrayField<MsgBracketOrderImpactRequest.BracketOrderComponent>(this.m_components, "components", false);
    v.EndObject<MsgBracketOrderImpactRequest>(this);
}

修改后的BracketOrderComponent.AcceptVisitor方法

internal override void AcceptVisitor<Visitor>(Visitor v)
{
    v.StartObject<MsgBracketOrderImpactRequest.BracketOrderComponent>(this);
    v.VisitBasicField<double>(ref this.m_limitPrice, "limitPrice", false);
    v.VisitBasicField<double>(ref this.m_stopPrice, "stopPrice", false);
    v.VisitEnumField<OrderType>(ref this.m_orderType, "orderType", false);
    v.VisitEnumField<OrderTimeInForce>(ref this.m_timeInForce, "timeInForce", false);
    v.VisitEnumField<OrderClass>(ref this.m_orderClass, "orderClass", false);
    v.VisitBasicField<ulong>(ref this.m_orderId, "orderId", false);
    v.VisitBasicField<double>(ref this.m_quantity, "quantity", false);
    v.VisitEnumField<OrderAction>(ref this.m_action, "action", false);
    v.EndObject<MsgBracketOrderImpactRequest.BracketOrderComponent>(this);
}

原理说明

C#中重写泛型方法时,基类方法的泛型约束会自动被继承,只有class或struct这类特殊约束允许在重写时额外补充,其他类型的约束重复声明都会导致编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:25:20