LINQ:无法将类型'System.Collections.Generic.IEnumerable <int>'隐式转换为'int'</int>

时间:2009-09-28 13:35:33

标签: c# linq

我从以下代码中收到错误:

int dreamX[];

private void Form1_Load(object sender, EventArgs e)
{ 
    sumX();
}

private void sumX()
{
    for (var i = 0; i < 8; i++)
    {
        dreamX[i] =
            from Control control in Controls
            where
                control.GetType() == typeof(TextBox)
                && control.Name.StartsWith("box")
            select Convert.ToInt32(((TextBox)control).Text);
    }
}

我收到此错误,如何显式转换此内容。

“无法将类型'System.Collections.Generic.IEnumerable -int-'隐式转换为'int'”

4 个答案:

答案 0 :(得分:13)

那么,该查询可能会返回多个值,因此您需要使用.Single().First().FirstOrDefault()扩展方法。

请注意,Single()只有在列表中只有一个元素时才有效,First()仅在至少有一个元素。如果列表中没有元素,则FirstOrDefault()将恢复为默认值(

根据您的确切需要,您必须选择:)

答案 1 :(得分:11)

这么多错了。

首先,您尝试将可能多个转换的整数分配给数组中的单个整数。这就是错误消息告诉你的。

此外,您展示的代码中没有任何地方是该数组已初始化。因此,即使您拨打.FirstOrDefault()之类的内容,您最终也会使用NullReferenceException。如果你能提供帮助,最好不要使用arrarys。坚持使用IEnumerable。

另外,你是linq查询有一个额外的步骤;而不是检查Controls集合中每个控件的类型,您应该调用它的.OfType()方法。

最后,linq的美妙之处在于你甚至不必编写for循环。您只需编写一个语句来评估所有文本框。

IEnumerable<int> dreamX;

private void Form1_Load(object sender, EventArgs e)
{ 
    sumX();
    int totalX = dreamX.Sum();
}

private void sumX()
{
    dreamX = from control in Controls.OfType<TextBox>()
             where control.Name.StartsWith("box")
             select Convert.ToInt32(control.Text);
}

答案 2 :(得分:8)

你想要的是这个:

int[] dreamX;
private void Form1_Load(object sender, EventArgs e)
        { 
         sumX();
        }
 private void sumX()
        {
                dreamX =( from Control control in Controls                  
                         where control.GetType() == typeof(TextBox) &&
                               control.Name.StartsWith("box")
                         select Convert.ToInt32(((TextBox)control).Text))
                                       .ToArray();             
        }

from子句生成IEnumerable 集合。您可以将其转换为扩展名为.ToArray()的数组

答案 3 :(得分:3)

FirstOrDefault()会将IEnumerable<int>变为int

实际上,它会在你的linq查询的输出结果中首次出现。