我试图弄清楚如何在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;
我试图避免为每个人创建静态对象,因为有很多。
感谢。
答案 0 :(得分:1)
如果您在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”),枚举是整数,所以这可能不适合你
答案 1 :(得分:1)
声明两种类型的类,并像
一样使用它们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>();
然后像{/ p>一样添加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);
}
答案 2 :(得分:0)
我假设这只是你需要做的事情的片段,探头/机架温度不是静态的,而是存在于数据库中。这是一个可以做你想做的结构:
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格式化我的代码。 :(
答案 3 :(得分:0)
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);
答案 4 :(得分:0)
我猜你可以选择一个通用的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
{
..
}
我认为所有其他答案也很棒。可能你需要更具体地了解你想要实现的目标。