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

本文关键字:类型 操作数 int string 不能 应用于 运算符 | 更新日期: 2023-09-27 18:14:13

所以我有一个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; }

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

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

错误的确切含义-stringint(或任何数字类(之间没有"=="比较。

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

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

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

或者对文本值使用int.Passe(如果sl.Year不是数字,则需要处理异常(:

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

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

我看到了两种可能性。。。

sl.Yearstring类型,或者sl.Typestring类型(或者两者都是(

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

string type = textBox2.Text;

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

您可以更改这些底层属性的类型,也可以尝试附加.ToString()以查看是否获得所需的行为。

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