我有一个看起来像这样的结构:
public struct ChannelSettings
{
public double slider20Hz;
public double slider25Hz;
public double slider31_5Hz;
public double slider40Hz;
}
Run Code Online (Sandbox Code Playgroud)
当滑块值改变如下时,我正在遍历我的用户界面对象:
foreach (Slider slider in grdEqSliders.Children)
{
// slidername = slider.Name;
switch(currentChannel)
{
case 1:
// Assign to channel.slidername
break;
case 2:
// Assign to channel.slidername
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法让我获得滑块名称然后将其转换为我可以在我的结构中直接引用的东西?例如,我想将slider.Name = "slider_20Hz"
in转换为slider20Hz
我在struct中使用的变量.
现在离开struct
定义的唯一方法就是使用反射 - 虽然非常混乱.
另一种选择 - 更改定义 - 是将值存储在字典中:
public class ChannelSettings {
Dictionary<string, double> _values = new Dictionary<string, double>();
public double slider20Hz {
get {
return GetByName("slider20Hz");
}
set {
_values["slider20Hz"] = value;
}
}
. . .
public void SetByName(string name, double value) {
_values[name] = value;
}
public double GetByName(string name) {
double v;
if (_values.TryGetValue("slider20Hz", out v)) {
return v;
}
return 0.0; // Default value
}
}
Run Code Online (Sandbox Code Playgroud)
然后设置一个给定名称的值,你可以写:
channel.SetByName(slider.Name, . . . )
Run Code Online (Sandbox Code Playgroud)
并获得一个值:
channel.GetByName(slider.Name)
Run Code Online (Sandbox Code Playgroud)