数据结构表示可扩展和唯一值

时间:2014-02-11 12:27:13

标签: c# enums

我有一个小问题。我在一个框架中有一个应用程序监视部分,供多个应用程序使用。

现在我有这样的功能:

public enum Vars
{
   CPU,
   RAM
}

public void Add(Vars variable, object value)
{
   [...]
}

在Add方法中用作参数的变量将用作数据库中条目的名称。 现在我得到了要求,应用程序可以在框架外指定自己的变量。因为你不能从枚举继承,这会导致一些麻烦。

我基本上看到了解决这个问题的两种可能性(我认为机器人不太满意)。

可能性1:

public void Add(enum variable, object value)

此方法可以接受各种枚举,因此用户可以使用Vars枚举以及他们自己定义的枚举。这个解决方案的问题是:用户可以在应用程序和框架中使用相同的名称。我无法区分具有值“CPU”的两个枚举(Framework可能将百分比值存储为“CPU”,应用程序可能将进程CPU使用存储为“CPU”)。

可能性2:

第二种方法是类而不是枚举,类似于:

public class Vars
{
    public const string CPU = "CPU";
    public const string RAM = "RAM";
}

这里的缺点: 1.写更多内容。 2.我必须将参数定义为字符串:

public void Add(string variable, object value);

这也可能导致错误使用(直接添加字符串而不是定义继承自Vars的类的应用程序。)

关于如何定义模型的任何想法:

  • 可以继承(通过特定于应用程序的值扩展值)
  • 可以用作参数
  • 确保没有双重(=相同值)条目 ?

1 个答案:

答案 0 :(得分:3)

上下文并不完全清楚,但是如何创建一个类

public class Vars
{
    public static Vars CPU = Vars.Get("CPU", 1);
    public static Vars RAM = Vars.Get("RAM", 2);

    //You can keep one of the params, name or id
    private Vars(string name, int id)
    {
        ...
    }

    public static Vars Get(string name, int id)
    {
        //check if id or name exists in static dictionary, and return that instance or create new one
    }
}


public void Add(Vars variable, object value);

现在用户可以创建任何类型的参数并传递给方法

Vars newVar = Vars.Get("MyNewParam", 10);

您可以轻松检查传递的参数是否为您知道的

如果参数相同,则Get方法返回相同的实例