你能有一个带string属性的enum吗?

本文关键字:enum 属性 string 有一个 | 更新日期: 2023-09-27 18:14:14

我正在尝试开发一个轻型客户端/服务器程序。一个"admin"程序应该能够向安装了该客户端程序的几个本地客户端机器发送通用命令。

我有一个Enum来控制常见的命令,像这样:

public enum Command
{
    Reboot,
    StartService,
    ShowMsg
}

这样我就可以从管理程序发送命令,像这样:

Command.Reboot

在客户端程序中,我可以有一个switch语句来执行该命令所要求的操作。

然而,对于enum的某些部分,我需要一个字符串属性来发送。

就像从管理程序,我想发送这样的东西:

Command.ShowMsg("Hi, this is a string message")

我如何做到这一点?我希望你能理解我的问题。

你能有一个带string属性的enum吗?

可以有一个包含枚举的类,如下所示:

enum CommandType
{
    Reboot,
    StartService,
    ShowMsg
}
[DataContract]
class Command
{
    [DataMember]
    public CommandType CmdType
    {
        get;
        set;
    }
    [DataMember]
    public string Value
    {
        get;
        set;
    }
    public CommandType(CommandType cmd, string value = null)
    {
        CmdType = cmd;
        Value = value;
    }
}

然后在需要的时候像这样使用:

new Command(CommandType.ShowMsg, "Hi, this is a string message.");

我会用一个类来做。

public class ServiceObject{
public String command {get;set;}
public String message {get;set;}
  public ServiceObject(String command,String message){
   this.command = command;
   if(message!=null)
     this.message = message;
  }
}

你可以通过

创建这个对象
new ServiceObject("ShowMessage","This is a Service Object");

new ServiceObject("Restart",null);

现在在你的服务器端只接受一个服务对象

您可以通过执行ServiceObject.commandServiceObject.message来检查其属性

您可以通过更改服务的契约来实现。所以在合同中可以有

interface IFooService
{
    void Execute(Command cmd);
    void ExecuteWithParam(Command cmd, string param1);
}

然而,这会给试图理解如何使用这种API的人带来问题。如果稍后尝试重构服务,还会出现维护问题。所以一个更好的选择是使用一个专用的方法每一个枚举值,而不是使用通用的Execute方法(或任何你叫它),并传递一个枚举,像这样:

interface IFooService
{
    void Reboot();
    void StartService(string[] args);
    void ShowMsg(string msg);
}