运算符==不能应用于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; }
嗯。。。如果错误是如上所述的,那么字符串和Int.之间的运算符==……我会假设sl.year是一个字符串,而我所看到的年份是一个整数。您需要转换其中一个或另一个。问题也可能出现在sl.Type和Type之间。。。不确定是哪一个,因为您从未为我们提供过productscopy
对象。
错误的确切含义-string
和int
(或任何数字类(之间没有"=="比较。
您需要将其中一个转换为另一个的类型。通常转换为更严格的类型会更好,但可能需要更多的错误处理。
在您的情况下,简单使用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.Year
是string
类型,或者sl.Type
是string
类型(或者两者都是(
在任何一种情况下,您比较的变量都应该声明为string
,如下所示:
string type = textBox2.Text;
如果需要,您可能需要.Trim
。
您可以更改这些底层属性的类型,也可以尝试附加.ToString()
以查看是否获得所需的行为。
您还需要按照上面的建议使用==
而不是=
,但这是您的打字错误,而不是您的问题,因为。NET不会编译。