Protobuf的Enum枚举类型不能同名?

简介: Protobuf的Enum枚举类型不能同名?

Protobuf的Enum枚举类型不能同名?

报错

enum CHARACTER_STATE
{
    IDLE = 0;
    MOVE = 1;
}

enum ENTITY_EVENT
{
    NONE = 0;
    IDLE = 1;
    MOVE_FWD = 2;
    MOVE_BACK = 3;
    JUMP = 4;
}

"message": "\"IDLE\" is already defined in \"SkillBridge.Message\".


"message": "Note that enum values use C++ scoping rules, meaning that enum values are siblings of their type, not children of it.  Therefore, \"NONE\" must be unique within \"SkillBridge.Message\", not just within \"ENTITY_EVENT\".",

原因

protobuf使用类似c的枚举规则,不允许枚举中出现同名。

解决办法

给枚举项加入前缀

enum CHARACTER_STATE
{
    IDLE = 0;
    MOVE = 1;
}


enum ENTITYEVENT
{
    ENTITYEVENT_NONE =0;
    ENTITY_EVENT_IDLE = 1;
    ENT_ITY_EVENT_MOVE_FWD = 2;
    ENT_IT_Y_EVENT_MOVE_BACK = 3;
    ENT_IT_Y_EVENT_JUM_P = 4;
}

在生成C#代码时,会忽略掉等同于ENTITYEVENT的前缀:

  public enum CHARACTER_STATE {
    [pbr::OriginalName("IDLE")] Idle = 0,
    [pbr::OriginalName("MOVE")] Move = 1,
  }

  public enum ENTITYEVENT {
    [pbr::OriginalName("ENTITYEVENT_NONE")] None = 0,
    [pbr::OriginalName("ENTITY_EVENT_IDLE")] Idle = 1,
    [pbr::OriginalName("ENT_ITY_EVENT_MOVE_FWD")] MoveFwd = 2,
    [pbr::OriginalName("ENT_IT_Y_EVENT_MOVE_BACK")] MoveBack = 3,
    [pbr::OriginalName("ENT_IT_Y_EVENT_JUM_P")] JumP = 4,
  }
目录
相关文章
|
3月前
|
存储 C语言
C enum(枚举)详解
在C语言中,`enum`(枚举类型)允许用户定义包含命名整数常量的数据类型,提高了代码的可读性和可维护性。通过关键字`enum`定义枚举,如`enum Color {RED, GREEN, BLUE}`。枚举值默认从0开始递增,也可自定义。枚举类型实际上是整型的别名,可用于简化代码并限制变量的具体取值范围。
169 15
|
7月前
|
程序员 C语言
c enum(枚举)
c enum(枚举)
118 1
|
7月前
|
程序员 测试技术 C++
[C++] enum枚举类型用法
[C++] enum枚举类型用法
109 0
|
7月前
|
API 索引
ffmpeg enum AVChannel枚举解析
ffmpeg enum AVChannel枚举解析
45 0
|
7月前
|
C++ Rust NoSQL
Rust 数据类型 之 类C枚举 c-like enum
Rust 数据类型 之 类C枚举 c-like enum
64 0
Rust 数据类型 之 类C枚举 c-like enum
|
7月前
|
Swift
Swift 中的枚举(Enum)
Swift 中的枚举(Enum)
57 2
|
7月前
|
SQL Java 数据库连接
myabtis中是否可以映射 Enum 枚举类
myabtis中是否可以映射 Enum 枚举类
|
Java 索引
枚举类 - 自定义枚举类与使用enum关键字
枚举类 - 自定义枚举类与使用enum关键字
129 0
|
JavaScript C#
enum:枚举类型
enum:枚举类型
188 0
|
Java 数据格式 XML
EMF介绍系列(四、枚举类型、自定义类型和Map)
除了普通的类(接口)以外,在类图里可以定义一些特殊的元素,比较常见的是枚举类型、自定义类型,它们对于一个完整可用的模型也是必不可 少的,这篇帖子主要介绍EMF里它们的使用方法。另外,由于EMF对Map的支持比较特别,所以在这里也简要介绍一下Map类型的定义方法。
1380 0