foreach语句无法运行?

时间:2018-10-11 05:56:58

标签: c# linq

var maxHeight = draw._shapes.Aggregate((agg, next) =>next.height > agg.height ? next : agg);
if (draw._shapes.Count == 0)
    trackBar_Size.Maximum = 484;
else
{
    foreach (float heights in maxHeight)
    {
        if (heights < 412)
        {
            trackBar_Size.Maximum = 484;
        }
        else if (heights > 412)
        {
            trackBar_Size.Maximum = 415;
        }
    }
}
  

错误3 foreach语句无法对'sCreator.Shape'类型的变量进行操作,因为'sCreator.Shape'不包含'GetEnumerator'的公共定义

我在 var maxHeight 语句中收到此错误。那么如何解决此错误并将LINQ结果用作浮点值?

2 个答案:

答案 0 :(得分:5)

这是因为Aggregate方法返回单个值(据我所见,_shapes中的最大值)。

简单地,尝试编写maxHeight.GetEnumerator()来看看编译器会抱怨。为了使用foreach循环,您需要具有集合(具有迭代器)。

或者,尝试编写maxHeight.GetType()(或maxHeight.ToString())来检查其真正含义。

或者只是在调试模式下检查变量,在适当的位置设置断点。

答案 1 :(得分:1)

var maxHeight = draw._shapes.Aggregate((agg, next) => next.height > agg.height ? next : agg);
            if (maxHeight.height > 412)
            {
                trackBar_Size.Maximum = 412;
            }
            else if (maxHeight.height < 412)
            {
                trackBar_Size.Maximum = 484;
            }

此代码将获得所需的高度作为浮点值。