найти, существует ли целое число в списке целых - PullRequest
56 голосов
/ 13 октября 2010

у меня есть этот код:

  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, даже если числа совпадают

есть идеи?

Ответы [ 7 ]

84 голосов
/ 13 октября 2010

Если вам просто нужен истинный / ложный результат

bool isInList = intList.IndexOf(intVariable) != -1;

, если intVariable не существует в списке, он вернет -1

66 голосов
/ 13 октября 2010

Пока ваш список инициализируется значениями, и это значение действительно существует в списке, Contains должно возвращать true.

Я пробовал следующее:

var list = new List<int> {1,2,3,4,5};
var intVar = 4;
var exists = list.Contains(intVar);

действительно установлено в true.

6 голосов
/ 13 октября 2010

То, как вы это сделали, правильно.Это прекрасно работает с этим кодом: х это правда.возможно, вы ошиблись где-то еще.

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
5 голосов
/ 13 октября 2010

Вот метод расширения, позволяющий кодировать как команду 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);
2 голосов
/ 01 июня 2018

Лучший код и полный здесь:

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 голос
/ 13 октября 2010
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 голосов
/ 13 октября 2010

Вы должны ссылаться на Selected, а не ids.Contains в качестве последней строки.

Я только что понял, что это проблема форматирования из OP. В любом случае, вы должны ссылаться на значение в Selected. Я рекомендую добавить несколько вызовов Console.WriteLine, чтобы точно увидеть, что выводится на печать в каждой строке, а также значение каждого значения.

После вашего обновления: Идентификатор является пустым списком, как это не генерирует исключение NullReferenceException? Как это никогда не было инициализировано в этом блоке кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...