【问题标题】:Invalid token 'event' in class, record, struct, or interface member declaration类、记录、结构或接口成员声明中的标记“事件”无效
【发布时间】:2021-02-17 22:59:31
【问题描述】:

我从 slack 获得了带有事件属性的发布响应,所以我想使用以下代码为事件创建模型

public Event event { get; set; } //getting error here


public class Event
        {
            public string type { get; set; }
            public string user { get; set; }
            public string text { get; set; }
            public string ts { get; set; }
            public string channel { get; set; }
            public string event_ts { get; set; }
        }
'''

got error in declaring event as name

【问题讨论】:

  • event 是一个关键字。您可以将属性命名为 Event(与类型同名是合法的),但最好将 Event 命名为更具体的名称,这样就不会与通用 C# 概念发生冲突(ChannelEvent 等)。
  • event是关键字,前缀@ (Event @event),或重命名
  • 大卫的回答解释了一个选项 - 但我建议重命名所有属性以遵循 .NET 命名约定,这将首先避免该问题。您应该能够使用属性来指定您的 C# 属性如何映射到 JSON 属性名称。

标签: c# asp.net-core .net-core


【解决方案1】:

由于event 是C# 中的保留关键字,您需要告诉编译器这不是 使用该关键字。您可以为此使用@

public Event @event { get; set; }

(顺便说一句:这在​​ View 代码中最常见,我们需要一个匿名对象来为 CSS 规则提供 class 属性。)


如果可能,建议您在 JSON 序列化/反序列化中维护 C# 命名约定并在这些约定之间进行转换。根据您执行该任务的方式,有不同的方法来处理它,例如使用属性属性或自定义序列化程序。

使用Event 作为类名可能也不理想。尽量具有描述性,以避免与语言中常见的任何内容发生冲突。您更新后的代码可能类似于:

public ChatEvent Event { get; set; }

//...
public class ChatEvent
{
    public string Type { get; set; }
    public string User { get; set; }
    public string Text { get; set; }
    public string Ts { get; set; }
    public string Channel { get; set; }
    public string Event_ts { get; set; }
}

【讨论】:

    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2014-06-22
    • 2016-07-10
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多