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

C#只读属性中switch表达式使用枚举ToString()无法编译的原因求解

编译失败核心原因

C# 语法要求 switch 表达式中每个分支的匹配值(=> 左侧的内容)必须是编译时常量。你使用的InitialMarginMeasure.Flat.ToString()属于运行时方法调用,返回值是在程序运行阶段才计算得到的,不属于编译期可确定的常量,因此不符合语法规则,触发编译报错。

可用解决方案

方案1(推荐):将Measure属性改为强类型枚举

直接把Measure的类型从string替换为你定义的InitialMarginMeasure枚举,既满足编译要求,还能避免字符串写错的隐患:

public class InitialMargin
{
    // ... properties
    // 把属性类型改成枚举
    public InitialMarginMeasure Measure { get; set; }
    public decimal? Amount { get; set; }
    public decimal? MarketValue { get; set; }
    
    public decimal? Margin => Measure switch
    {
        // 枚举值属于编译时常量,符合语法要求
        InitialMarginMeasure.Flat => Amount,
        InitialMarginMeasure.MarketValue => Amount * MarketValue,
        _ => default
    };
}

public enum InitialMarginMeasure
{
    Flat,
    MarketValue
}

方案2:保留Measure为string类型,使用nameof运算符获取常量字符串

如果业务逻辑要求Measure必须是string类型,可以用nameof运算符替代ToString(),nameof的返回值是编译期确定的字符串常量,符合匹配要求:

public decimal? Margin => Measure switch
{
    nameof(InitialMarginMeasure.Flat) => Amount,
    nameof(InitialMarginMeasure.MarketValue) => Amount * MarketValue,
    _ => default
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:27:03