-4

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

3 回答 3

2

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

于 2013-05-16T19:28:02.447 回答
0

我看到了两种可能...

要么sl.Year是类型string要么sl.Type是类型string(或两者)

在任何一种情况下,您比较的变量都应该string像这样声明:

string type = textBox2.Text;

如果需要,您可能想要.Trim它。

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

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

于 2013-05-16T19:29:13.947 回答
0

正是错误所说的 -stringint(或任何数字类)之间没有“==”比较。

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

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

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

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

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

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

于 2013-05-16T19:29:23.213 回答