链接数组属性

时间:2018-12-22 14:17:38

标签: c# arrays winforms

我有一个类(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";
        }
} 

3 个答案:

答案 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();
    }
}