c#带算术运算的列表

时间:2016-06-22 04:04:43

标签: c# list

我希望用我的列表实现算术运算,在这种情况下: 列“宽度”*列“高度”应重新写入“部分”列。 我试过做一个循环,但它不起作用。 我在行上放了一个breakPoint:

_Area[i].Partial = _Area[i].width * _Area[i].height;

调试从不停止它们我可以认为这条线没有被引用。

这是我的集合视图模型:

public class CollectionVM_Area : BindableBase
{
    private Values_Area _Area = new Values_Area();
    public Values_Area Area
    {
        get { return _Area; }
        set { SetProperty(ref _Area, value); }
    }

    public CollectionVM_Area()
    {
        _Area.Add(new Area()
        {
            width=10, 
            height=11,
        });
        _Area.Add(new Area()
        {
            width=5, 
            height=5, 
            Partial=1,
        });

        bool NeedPartial = false;
        int i = 0;
        while (NeedPartial = false && i < _Area.Count)
        {
            if (_Area[i].Partida == true)
            {
                NeedPartial = true;
            }
            else
            {
                i++;
            }
        }

        if (NeedPartial==true)
        {
            _Area[i].Partial = _Area[i].width * _Area[i].height;
            NeedPartial = false;
        }
        else
        {
            NeedPartial = true;
        }
    }
}

我的项目是一个UWP,但我认为与列表中的窗体形式没什么不同,任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分:0)

您的代码中有两个mistalkes。首先,您的while - 循环代表比较(=朝向==)。因此,您的while条件中的第一项始终评估为false。其次,你的计算位于循环之外,导致NeedPartial - 值被设置,但永远不会被读取,我怀疑你想要什么。

为此写下:

bool NeedPartial = false;
int i = 0;
while (NeedPartial == false && i < _Area.Count) // or even simpler: while (!NeedPartial ...)
{
    if (_Area[i].Partida == true) // or simply: if (_Area[i].Partida) { ... }
    {
        NeedPartial = true;
    }
    else
    {
        i++;
    }

    if (NeedPartial==true) // if (NeedPartial) ...
    {
        _Area[i].Partial = _Area[i].width * _Area[i].height;
        NeedPartial = false;
    }
    else
    {
        NeedPartial = true;
    }
}

答案 1 :(得分:0)

  

编辑:已回答。

正确的循环是:

 bool NeedPartial = false;
            int i = 0;
            while (!NeedPartial && i < _Area.Count)
            {
                if (_Area[i].Partida)
                {
                    NeedPartial = true;
                }
                else
                {
                    i++;
                }
                if (NeedPartial)
                {
                    _Area[i].Partial = _Area[i].width * _Area[i].height;
                    NeedPartial = false;
                    i++;
                }
                else
                {
                    NeedPartial = true;
                }
            }

感谢HimBromBeere的帮助。