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

实现这一点的最佳数据结构是什么?[C#中的嵌套属性],c#,c++,data-structures,C#,C++,Data Structures,我试图找出如何在C#的数据结构中高效地存储和组织以下数据。这些数据是设置,每个设置都有相应的参数名称(字符串)、标签(字符串)以及可能的其他项 例如,C++中的数据: //Analog Inputs #define PROBETEMPERATURE "P33352" #define PROBETEMPERATURE2 "P33353" ... //Digital Inputs #define RACKTEMPERATURE1 "P33384" #define RACKTEMPE

我试图找出如何在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;
我试图避免为每个对象创建静态对象,因为有很多

谢谢。

< P>如果你在C++中使用了“y*”,那么可能EnUM应该是你的选项

可以使用枚举类的GetName方法

另请参见最后一个示例

每个枚举值的名称可以在空格处有“u”(Probe_Temperature”而不是“Probe Temperature”),然后只需string.replace或尝试编写扩展方法,这将为您提供正确的标签

编辑: 哦,对不起,我失败了
您使用字符串作为参数(“P33352”),enum是整数,因此这可能不是您的解决方案

我假设这只是您需要执行的操作的一小部分,并且探测器/机架温度不是静态的,而是在数据库或其他东西中。以下是一个可以满足您需求的结构:

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;
    }
}
List infos=新列表()
{
新温度信息(“探头”)
{
新温度(“P33352”,“温度1”),
新温度(“P33353”,“温度2”),
},
新温度信息(“机架”)
{
新温度(“P33384”,“温度1”),
新温度(“P33385”,“温度2”),
}
};
公共类温度信息:列表
{
公共字符串名称{get;set;}
公共温度信息(字符串名称)
{
this.Name=Name;
}
}
公共级温度
{
公共字符串ID{get;set;}
公共字符串标签{get;set;}
公共温度(字符串id、字符串标签)
{
this.ID=ID;
这个标签=标签;
}
}

PS:我希望我的代码格式正确:(

有这样的东西吗

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);
列表输入=新列表();
输入x=新输入(){InputType=InputType.Digital};
x、 机架温度=新温度{Parameter=“P”,Label=“L”};
x、 ProbeTemperature=新温度{Parameter=“P',Label=“L”};
增加(x);

我想您可以选择一个通用设置类,该类具有参数和标签等实例变量。然后您可以为每个设置扩展该类,并添加任何其他参数

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
{

..

}

我认为所有其他答案都很好。也许你需要更具体地说明你到底想要实现什么。

类似的东西可能会有所帮助(不知道这是否是最好的,但我会用它)

声明这两种类型的类,并像

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; }
}
你可以像吃东西一样吃

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 digiData=new List();

然后添加
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);
    }

感谢您的回复,我喜欢设置界面的想法。然而,我有将近500个设置,为每个设置创建一个对象可能会让人望而生畏。理想情况下,我希望不需要初始化,只需调用
const
…这可能只需拥有一整组包含const的静态对象,但是我不确定。再次感谢大家的帮助。我找到了一个很好的枚举解决方案。这是一个更大的主题(枚举绑定),但基本概念是枚举值的同字符串描述。您可以使用System.ComponentModel.DescriptionAttribute而不是codeproject上提供的EnumDescriptionAttribute。