繁体   English   中英

实现这一目标的最佳数据结构是什么? [C#中的嵌套属性]

[英]What is the best data structure to implement this? [Nested Properties in C#]

我试图弄清楚如何在C#中的数据结构中有效地存储和组织以下数据。 数据是每个都具有相应参数名称(字符串),标签(字符串)以及可能的其他项目的设置。

例如,C ++中的数据:

//Analog Inputs
#define PROBETEMPERATURE    "P33352"
#define PROBETEMPERATURE2   "P33353"
... 
//Digital Inputs
#define RACKTEMPERATURE1    "P33384"
#define RACKTEMPERATURE2    "P33385"
...

//Analog Input Labels
#define LBLPROBETEMPERATURE     "Probe Temperature"
#define LBLPROBETEMPERATURE2    "Probe Temperature 2"
...
//Digital Input Labels
#define LBLRACKTEMPERATURE1     "Rack Temperature 1"
#define LBLRACKTEMPERATURE1     "Rack Temperature 2"
...

有没有办法使用嵌套属性有效地构建它,只需使用const或更好的方法? 例如,实施将是:

AnalogInput.PROBETEMPERATURE.Paramater;
AnalogInput.PROBETEMPERATURE.Label;

DigitalInput.RACKTEMPERATURE1.Paramater;
DigitalInput.RACKTEMPERATURE1.Label;

我试图避免为每个人创建静态对象,因为有很多。

谢谢。

如果您在c ++中使用#defines,则可能enum应该是您的选择

您可以使用Enum类的GetName方法http://msdn.microsoft.com/en-us/library/system.enum.getname.aspx

另请参阅此处的最后一个示例http://msdn.microsoft.com/en-us/library/cc138362.aspx

每个枚举值的名称在空格处可以有'_'(“Probe_Temperature”而不是“Probe Temperature”),然后只需要string.replace或者尝试编写扩展方法,这样可以给你正确的标签

编辑:哎呀,对不起,我失败了你使用字符串作为参数(“P33352”),枚举是整数,所以这可能不适合你

这样的事情可能会有所帮助(不知道它是否是最好的,但我会用它)

声明两种类型的类并使用它们

public class AnalogInput
{
    public string Label { get; set; }
    public string Parameter { get; set; }
}

public class DigitalInput
{
    public string Label { get; set; }
    public string Parameter { get; set; }
}

你可以像消费它们一样

创建一个实例

DigitalInput digiIn = new DigitalInput();
digiIn.Label = "This is digital Input";
digiIn.Parameter = "This is digital Parameter"

如果你想拥有许多数字输入或模拟输入值,你可能需要声明List<DigitalInput> digiData = new List<DigitalInput>();

然后添加digiIn就好了

digiData.Add(digiIn);

同样可以用于模拟

让我告诉你怎么做

List <DigitalInput> digiData = new List<DigitalInput>();
    for(int x =0;x<10;x++)
    {
       DigitalInput digiIn = new DigitalInput();
       digiIn.Label = "This is digital Input No "+ x.ToString();
       digiIn.Parameter = "This is digital Parameter No "+ x.ToString();
       digiData.Add(digiIn);
    }

并显示您可能会做的值

foreach (DigitalInput dataToDisplay in digiData )
{
MessageBox.Show("Label is :" + dataToDisplay.Label +" and Parameter is " + dataToDisplay.Parameter);
}

我假设这只是你需要做的事情的片段,探头/机架温度不是静态的,而是存在于数据库中。 这是一个可以做你想要的结构:

List<TemperatureInfo> infos = new List<TemperatureInfo>()
{
    new TemperatureInfo("Probe")
    {
    new Temperature("P33352", "Temperature 1"),
    new Temperature("P33353", "Temperature 2"),
    },
    new TemperatureInfo("Rack")
    {
    new Temperature("P33384", "Temperature 1"),
    new Temperature("P33385", "Temperature 2"),
    }
};

public class TemperatureInfo : List<Temperature>
{
    public string Name { get; set; }

    public TemperatureInfo(string name)
    {
    this.Name = name;
    }
}

public class Temperature
{
    public string ID { get; set; }
    public string Label { get; set; }

    public Temperature(string id, string label)
    {
    this.ID = id;
    this.Label = label;
    }
}

PS:我希望SO格式化我的代码。 :(

Perhas这样的事情?

public class Input
{
     public InputType InputType { get; set; }
     public Temperature ProbeTemperature { get; set; }
     public Temperature RackTemperature { get; set; }
}

public class Temperature
{
     public string Parameter { get; set; }
     public string Label { get; set; }
}

public enum InputType
{
     Digital,
     Analog
}

然后使用如下:

List<Input> inputs = new List<Input>();

Input x = new Input() { InputType = InputType.Digital };
x.RackTemperature = new Temperature { Parameter = "P", Label = "L" };
x.ProbeTemperature = new Temperature { Parameter = "P', Label = "L" };

inputs.Add(x);

我想你可以去一个通用的Settings类,它有像参数和标签这样的实例变量。 然后,您可以为每个设置扩展此类,并添加任何其他参数。

public class Settings
{
    public readonly string Parameter;
    public readonly string Label;

    public Settings(string parameter, string label)
    {
        Parameter = parameter;
        Label = label;
    }
}

public class ProbeTemperature : Settings
{

..

}

我认为所有其他答案也很棒。 可能你需要更具体地了解你想要实现的目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM