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

ASP.NET Core Razor CSHTML中C# 9 switch表达式关系模式报错问题

解决Razor视图中C# 9.0 Switch表达式的RZ1025错误

在Razor的CSHTML文件中使用C# 9.0的模式匹配switch表达式时,<符号会被Razor解析器误判为HTML标签开头,从而触发RZ1025: The element "" was not closed错误。以下是几种可行的解决方法:

方法1:提取比较结果为局部变量

先将CompareTo的执行结果存入变量,再基于变量编写switch表达式,避开直接在分支中使用<:

@{
    int compareResult = b.Date.CompareTo(now.Date);
    string c = compareResult switch {
        < 0 => "before",
        > 0 => "after",
        _ => "today"
    };
}

方法2:用括号包裹关系模式

给< 0这类关系模式加上括号,明确告知Razor解析器这是C#代码而非HTML标签:

@{
    string c = b.Date.CompareTo(now.Date) switch {
        (< 0) => "before",
        (> 0) => "after",
        _ => "today"
    };
}

方法3:使用带when子句的变量模式

通过变量模式结合when条件判断实现相同逻辑,绕开直接的关系模式写法:

@{
    string c = b.Date.CompareTo(now.Date) switch {
        var res when res < 0 => "before",
        var res when res > 0 => "after",
        _ => "today"
    };
}

方法4:将逻辑封装到后端方法

把switch表达式的逻辑迁移到后端C#类(比如扩展方法、视图模型)中,Razor视图直接调用该方法即可:

// 后端扩展方法示例
public static string GetDateRelativeDesc(this DateTime date, DateTime now)
{
    return date.CompareTo(now.Date) switch {
        < 0 => "before",
        > 0 => "after",
        _ => "today"
    };
}

// Razor视图中调用
@{
    string c = b.Date.GetDateRelativeDesc(now);
}

以上方法均能避免Razor解析器的误识别,同时保留switch表达式的简洁性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:00:28