所以我做了这个课:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// Class for checking if an OrgID already exsists.
public class AlreadyMade
{
public int ListOfOrgs { get; set; }
}
我正在尝试从SQL数据库中的表中的整数列创建一个数组,以便我可以使用该数组来查看该整数是否已经存在,并且这里是代码:< / p>
SqlConnection con = new SqlConnection(constr);
AlreadyMade[] AllOrgs = null;
string CheckQuery = @"SELECT OrgID FROM License";
using (var command = new SqlCommand(CheckQuery, con))
{
con.Open();
using (var reader = command.ExecuteReader())
{
var list = new List<AlreadyMade>();
while (reader.Read())
list.Add(new AlreadyMade {ListOfOrgs = reader.GetInt32(0)});
AllOrgs = list.ToArray();
}
}
for (int n = 0; n < AllOrgs.Length; n++)
{
if (AllOrgs[n].Equals(ID) == true)
{
Found = 1;
}
}
问题是它总是跳过
if (AllOrgs[n].Equals(ID) == true)
是否我正在寻找的整数已存在于数组中。显而易见的是,我显然不明白我所制作的课程是如何运作的,所以有人可以帮我解决这个问题并最好解释一下我做错了什么吗?谢谢!
答案 0 :(得分:2)
问题是您正在将类对象本身与整数进行比较:
for (int n = 0; n < AllOrgs.Length; n++)
{
if (AllOrgs[n].Equals(ID) == true)
{
Found = 1;
}
}
下面
if (AllOrgs[n].Equals(ID) == true)
您需要将ID
与对象内的integer
进行比较(ListOfOrgs
):
if (AllOrgs[n].ListOfOrgs == ID)
或
if (AllOrgs[n].ListOfOrgs.Equals(ID))
您可以通过覆盖Equals
内的AlreadyMade
方法来存档:
public class AlreadyMade
{
public int ListOfOrgs { get; set; }
public override bool Equals(object obj)
{
var item = (int?)obj;
if (item == null)
{
return false;
}
return this.ListOfOrgs.Equals(item.Value);
}
}
现在,当您将Equals
与object
进行比较(ID
)时,您将执行此方法。
答案 1 :(得分:0)
if( AllOrgs.OfType<AlreadyMade>().ToList().Contains ( new AlreadyMade {ListOfOrgs = ID}) == true)
尝试上面的代码,不需要for循环。抱歉频繁编辑,但由于您的命名约定,我感到困惑。