运算符==不能应用于string和int类型的操作数

时间:2013-05-16 19:24:53

标签: c# winforms search

所以我有winform,其中我有一个包含信息的数据网格,我想在其中搜索,但我希望搜索的标准是产品的年份(int)及其类型(字符串)。

products[] a = new products[productscopy.Count];
int type = int.Parse(textBox2.Text);
int year = int.Parse(textBox1.Text);

int br = 0;
foreach (products sl in productscopy)
{
    if (sl.Year == year && sl.Type == type) //line that causes problem
    {
        a[br] = sl; br++;
    }
}
if (br > 0)
{
    products[] b = new products[br];
    for (int i = 0; i < br; i++)
    {
        b[i] = a[i];
    }
    dataGridView1.DataSource = b;
    dataGridView1[0, 0].Selected = false;
}
else { dataGridView1.DataSource = null; }

3 个答案:

答案 0 :(得分:2)

嗯......如果错误是如上所述,运算符==在字符串和Int之间....我会假设sl.year是一个字符串,而我可以看到的是一个整数。你需要转换一个或另一个。问题也可能在sl.Type和Type之间......不确定哪个,因为你从未为我们提供过productscopy对象。

答案 1 :(得分:0)

我看到两种可能性......

sl.Year类型stringsl.Type类型string(或两者)

在任何一种情况下,您比较的变量都应声明为string,如下所示:

string type = textBox2.Text;

如果需要,您可能需要.Trim

您可以更改这些基础属性的类型,也可以尝试附加.ToString()以查看是否获得了预期的行为。

您还需要按照上面的建议使用==而不是=,但这不是您的问题,因为.NET不会编译。

答案 2 :(得分:0)

究竟是什么错误 - stringint(或任何数字类)之间没有“==”比较。

您需要将其中一个转换为另一个类型。通常转换为更严格的类型更好,但可能需要更多的错误处理。

在您的情况下,从textBox1.Text简单使用未解析的年份(可能与类型相同)就足够了:

if (sl.Year == textBox1.Text && sl.Type == textBox2.Text)

或在文本值上使用int.Parse(如果sl.Year不是数字,则需要处理异常):

if (int.Parse(sl.Year) == year && int.Parse(sl.Type) == type)

注意:您的样本在年度比较中有=,可能是错误的。