为什么这个循环不适用于我制作的这个类?

时间:2016-06-21 16:16:37

标签: c# sql arrays visual-studio class

所以我做了这个课:

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) 

是否我正在寻找的整数已存在于数组中。显而易见的是,我显然不明白我所制作的课程是如何运作的,所以有人可以帮我解决这个问题并最好解释一下我做错了什么吗?谢谢!

2 个答案:

答案 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);
    }
}

现在,当您将Equalsobject进行比较(ID)时,您将执行此方法。

答案 1 :(得分:0)

if( AllOrgs.OfType<AlreadyMade>().ToList().Contains ( new AlreadyMade {ListOfOrgs = ID}) == true)
  

尝试上面的代码,不需要for循环。抱歉频繁编辑,但由于您的命名约定,我感到困惑。