如何设置包含枚举的对象的多个参数的值?

Posted

技术标签:

【中文标题】如何设置包含枚举的对象的多个参数的值?【英文标题】:How do you set the value of more than 1 parameter of an object containing enums? 【发布时间】:2015-09-28 21:27:48 【问题描述】:

我在 VB.NET 中使用 Protobuf-net 将电机命令从一台计算机传递到另一台计算机。下面是我的 proto 文件的示例,其中包含两个枚举,CommandActionMotorChoice。我想在一台计算机上为它们中的每一个设置一个值,然后从另一台计算机上检索这些值。

Public Class RemoteControl

<ProtoContract>
Public Class Command

    <ProtoContract>
    Enum CommandAction
        <ProtoMember(1)>
        HOME_MOTOR
        <ProtoMember(2)>
        MOVE_ABS
    End Enum

    <ProtoContract>
    Enum MotorChoice
        <ProtoMember(1)>
         MOTOR1
        <ProtoMember(2)>
         MOTOR2
    End Enum
End Class
End Class

我在尝试为动作和电机选择设置值时遇到问题。当我只需要设置一个参数时,下面的语句就起作用了

Dim myProto As New RemoteControl.Command.CommandAction
myProto= RemoteControl.Command.CommandAction.HOME_MOTOR

尝试设置两个参数时,我尝试了以下操作:

 Dim myProtoExpanded As New RemoteControl.Command
 myProtoExpanded.CommandAction = RemoteControl.Command.CommandAction.HOME_MOTOR
 myProtoExpanded.MotorChoice= RemoteControl.Command.MotorChoice.MOTOR1

编译器抛出错误,说左边都是类型,不能用作表达式。在序列化之前设置myProtoExpanded的两个参数的值的正确方法是什么?我想发送一个包含两个枚举信息的对象

【问题讨论】:

【参考方案1】:

您定义了 Enum 数据类型,但没有将该枚举的数据成员添加到 Command 类中。

Public Class Command
   Enum CommandAction
      ... 
   End Enum
   Enum MotorChoice
        ....
   End Enum

   Public action as CommandAction
   Public motor as MotorChoice

End Class

myProtoExpanded.action = RemoteControl.Command.CommandAction.HOME_MOTOR
myProtoExpanded.motor = RemoteControl.Command.MotorChoice.MOTOR1

【讨论】:

以上是关于如何设置包含枚举的对象的多个参数的值?的主要内容,如果未能解决你的问题,请参考以下文章

Object.assign()合并对象

如何设置映射输入的嵌套 JSON 数组对象的状态

如何从 servlet 动态设置/获取复选框的值

Jquery如何取得DIV里面的多个IMG并且设置他们的值

postman的参数params如何设置数组和对象参数

Redis 1.3 hash