所以我有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; }
答案 0 :(得分:2)
嗯......如果错误是如上所述,运算符==在字符串和Int之间....我会假设sl.year是一个字符串,而我可以看到的是一个整数。你需要转换一个或另一个。问题也可能在sl.Type和Type之间......不确定哪个,因为你从未为我们提供过productscopy
对象。
答案 1 :(得分:0)
我看到两种可能性......
sl.Year
类型string
或sl.Type
类型string
(或两者)
在任何一种情况下,您比较的变量都应声明为string
,如下所示:
string type = textBox2.Text;
如果需要,您可能需要.Trim
。
您可以更改这些基础属性的类型,也可以尝试附加.ToString()
以查看是否获得了预期的行为。
您还需要按照上面的建议使用==
而不是=
,但这不是您的问题,因为.NET不会编译。
答案 2 :(得分:0)
究竟是什么错误 - string
和int
(或任何数字类)之间没有“==”比较。
您需要将其中一个转换为另一个类型。通常转换为更严格的类型更好,但可能需要更多的错误处理。
在您的情况下,从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)
注意:您的样本在年度比较中有=
,可能是错误的。