我有一个类(Winforms应用程序),它监视一组实际开关的状态,并将它们的打开/关闭状态存储在两个数组中。一个数组是二进制(0,1)格式的状态,另一个数组是字符串(“ open”,“ closed”)格式的状态。 UI使用字符串格式,而内部calcs使用两种格式,因此我需要两个数组。
我一直在努力寻找链接这两个数组的最佳方法,因此,如果应用程序设置了一个数组中的一个元素,则另一个数组中的对应数组元素会自动同时正确设置。格式。
我已经考虑过使用某种绑定,但是显然Winforms不会在属性之间进行绑定,而只会进行WPF。我还考虑过使用每个属性的Set来设置其他元素的逻辑(请参见下文),但是我无法弄清楚如何配置Set来访问单个数组元素(也许是索引器,尽管我不确定如果那是正确的道路,因为我对此一无所知)。
这是我目前拥有的代码,因为它不知道如何在逻辑语句中将数组与int等同,所以它当然不起作用。
对解决方案的任何帮助将不胜感激。谢谢。
public class SystemStatus
{
public string[] strStatus
{
get
{
return strStatus;
}
set
{
strStatus = value;
binStatus = value == "closed" ? 1 : 0;
}
}
public int[] binStatus
{
get
{
return binStatus;
}
set
{
binStatus = value;
strStatus = value == 1 ? "closed" : "open";
}
}
答案 0 :(得分:0)
UI使用字符串格式…所以我需要两个数组
我想说最好的解决方案是拥有一个布尔数组,并修改您的UI代码以将布尔值呈现为open / closed或其他形式。如果需要帮助,请发布一些UI代码,但这应该很简单。例如通过使用扩展方法,例如:
public string ToOpenClosed(this bool value)
{
return value ? "open" : "closed";
}
答案 1 :(得分:0)
不确定您的目标,但是您可以尝试以下方法:
class SystemStatus
{
private string[] strStatus_;
private int[] binStatus_;
public string[] strStatus
{
get
{
return strStatus_;
}
set
{
strStatus_ = value;
binStatus_ = new int[strStatus_.Length];
for (int i = 0; i < strStatus_.Length; i++)
{
binStatus_[i] = strStatus_[i] == "closed" ? 1 : 0;
}
}
}
public int[] binStatus
{
get
{
return binStatus_;
}
set
{
binStatus_ = value;
strStatus_ = new string[binStatus_.Length];
for (int i = 0; i < binStatus_.Length; i++)
{
strStatus_[i] = binStatus_[i] == 1 ? "closed" : "open";
}
}
}
答案 2 :(得分:0)
您可能会这样:
strStatus = value.Select(v => v == 1 ? "closed" : "open").ToArray();
并且:
binStatus = value.Select(v => v == "closed" ? 1 : 0).ToArray();
更完整的解决方案:
private string[] _strStatus;
private int[] _binStatus;
public string[] strStatus
{
get
{
return _strStatus;
}
set
{
_strStatus = value;
_binStatus = value.Select(v => v == "closed" ? 1 : 0).ToArray();
}
}
public int[] binStatus
{
get
{
return _binStatus;
}
set
{
_binStatus = value;
_strStatus = value.Select(v => v == 1 ? "closed" : "open").ToArray();
}
}