在整数列表中查找整数是否存在

75

我有这段代码:

  List<T> apps = getApps();

        List<int> ids;

        List<SelectListItem> dropdown = apps.ConvertAll(c => new SelectListItem
        {
            Selected = ids.Contains(c.Id),
            Text = c.Name,
            Value = c.Id.ToString()
        }).ToList();


ids.Contains

尽管数字匹配,似乎始终返回false。

有任何想法吗?


10
不,那基本上就是你要做的。 - mqp
mquander 是正确的 - 也许你可以尝试一个小例子,比如 List<int> foo = new List<int>(); for (int i = 0; i < 10; ++i) { foo.Add(i); } Console.WriteLine(foo.Contains(2)); - NG.
就像mquander所说的那样,这就是你要做的。一定还有其他问题。 - RonaldV
1
List<int> ids没有被初始化。尝试添加一些已知的值 ~ var ids = new List<int>() {2,4,6,8}; - Bobby Borszich
你必须使用 ids.Contains(IntParam) @leora。 - AliNajafZadeh
显示剩余2条评论
8个回答

103
如果你只需要一个真/假结果
bool isInList = intList.IndexOf(intVariable) != -1;

如果intVariable在列表中不存在,它将返回-1。


1
IndexOf是从零开始的。应该是>= 0 :) - Frédéric Hamidi
9
实际上,它只需要检查 != -1,因为返回值为 -1 被定义为负结果。 - Daniel DiPaolo

88
只要您的列表已使用值进行初始化并且该值实际存在于列表中,那么Contains应该返回true。
我尝试了以下代码:
var list = new List<int> {1,2,3,4,5};
var intVar = 4;
var exists = list.Contains(intVar);

并且存在确实被设置为true。


OP更新了他的问题,而你进行了回答。他的ID列表似乎没有被初始化。这应该会被编译器捕捉到吧? - NG.
没错。一个未初始化的列表应该会导致编译器错误。但如果该列表在类级别上定义,那么它将被初始化为null,并且编译器会很高兴。 - Rune Grimstad

10

这是一个扩展方法,它允许编码类似于SQL IN命令的语句。

public static bool In<T>(this T o, params T[] values)
{
    if (values == null) return false;

    return values.Contains(o);
}
public static bool In<T>(this T o, IEnumerable<T> values)
{
    if (values == null) return false;

    return values.Contains(o);
}

这允许像这样的东西:
List<int> ints = new List<int>( new[] {1,5,7});
int i = 5;
bool isIn = i.In(ints);

或者:

int i = 5;
bool isIn = i.In(1,2,3,4,5);

6
您的做法是正确的。使用该代码时可以正常工作:x为真。 可能是您在其他地方犯了错误。
List<int> ints = new List<int>( new[] {1,5,7}); // 1

List<int> intlist=new List<int>() { 0,2,3,4,1}; // 2

var i = 5;
var x = ints.Contains(i);   // return true or false

3

最好的代码和完整的内容都在这里:

NumbersList.Exists(p => p.Equals(Input)

使用:

List<int> NumbersList = new List<int>();
private void button1_Click(object sender, EventArgs e)
{
    int Input = Convert.ToInt32(textBox1.Text);
    if (!NumbersList.Exists(p => p.Equals(Input)))
    {
       NumbersList.Add(Input);
    }
    else
    {
        MessageBox.Show("The number entered is in the list","Error");
    }
}

1
bool vExist = false;
int vSelectValue = 1;

List<int> vList = new List<int>();
vList.Add(1);
vList.Add(2);

IEnumerable vRes = (from n in vListwhere n == vSelectValue);
if (vRes.Count > 0) {
    vExist = true;
}

0

你应该引用Selected而不是最后一行的ids.Contains

我刚意识到这是一个格式问题,来自OP。无论如何,你应该引用Selected中的值。我建议添加一些Console.WriteLine调用,以查看每行打印出的内容以及每个值是什么。

在你的更新之后:ids是一个空列表,为什么没有抛出NullReferenceException?因为它在那个代码块中从未被初始化。


0
string name= "abc";
IList<string> strList = new List<string>() { "abc",  "def", "ghi", "jkl", "mno" };
if (strList.Contains(name))
{
  Console.WriteLine("Got It");
}

/////////////////   OR ////////////////////////

IList<int> num = new List<int>();
num.Add(10);
num.Add(20);
num.Add(30);
num.Add(40);

Console.WriteLine(num.Count);   // to count the total numbers in the list

if(num.Contains(20)) {
    Console.WriteLine("Got It");    // if condition to find the number from list
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接