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

C# Razor中使用保留关键字default作为属性名报错求助

解决方案

default是C#保留关键字,要访问以关键字命名的类属性,需要按以下规则处理:

  • 首先在C#语法层面,给关键字属性名加@前缀转义,让编译器将其识别为普通标识符
  • 在Razor中输出时,将完整的C#表达式包裹在@()中,避免Razor解析歧义

正确写法示例

@foreach (你的命名空间.Networks n in Model.networks)
{
    <tr>
        <td>default</td>
        <td>@(n.@default)</td>
    </tr>
}

备选方案(上述写法无效时使用)

如果受框架版本限制上述写法不生效,可以通过反射提前取值中转避开冲突:

@foreach (你的命名空间.Networks n in Model.networks)
{
    var defaultValue = n.GetType().GetProperty("default").GetValue(n, null);
    <tr>
        <td>default</td>
        <td>@defaultValue</td>
    </tr>
}

可选根治方案

如果有权限修改Networks类的定义,建议给属性加字段映射注解,将属性名改为非关键字形式,从根源避免冲突:

// System.Text.Json 序列化映射示例
[JsonPropertyName("default")]
public bool IsDefault { get; set; }

// EFCore 数据库字段映射示例
[Column("default")]
public bool IsDefault { get; set; }

修改后Razor中直接写@n.IsDefault即可正常访问。

错误写法原因说明

  • 直接写@n.default:Razor会将default识别为C#关键字表达式,而非属性名,因此抛出上下文不存在该名称的错误
  • 写@n.@(@default):内层的@default会被Razor识别为独立变量,你未定义该变量自然报错
  • 此前你尝试的写法输出类名+@default,是因为Razor未正确识别转义规则,将n.@default当成了字符串拼接处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:15:02