Ответ 1
Если вам нужен только истинный/ложный результат
bool isInList = intList.IndexOf(intVariable) != -1;
если intVariable не существует в List, он вернет -1
У меня есть этот код:
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, даже если числа соответствуют
любые идеи?
Если вам нужен только истинный/ложный результат
bool isInList = intList.IndexOf(intVariable) != -1;
если intVariable не существует в List, он вернет -1
Пока ваш список инициализируется значениями и это значение действительно существует в списке, то Contains должно возвращать true.
Я попробовал следующее:
var list = new List<int> {1,2,3,4,5};
var intVar = 4;
var exists = list.Contains(intVar);
И существует действительно значение true.
То, как вы это сделали, правильно. Он отлично работает с этим кодом: x истинно. возможно, вы допустили ошибку где-то еще.
List<int> ints = new List<int>( new[] {1,5,7});
var i = 5;
var x = ints.Contains(i);
Вот метод расширения, который позволяет кодировать, как команда 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);
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;
}
Вы должны ссылаться на Selected
not ids.Contains
как на последнюю строку.
Я просто понял, что это проблема форматирования, из OP. Независимо от того, вы должны ссылаться на значение в Selected. Я рекомендую добавить некоторые вызовы Console.WriteLine, чтобы точно увидеть, что распечатывается в каждой строке, а также то, что каждое значение.
После вашего обновления: ids - пустой список, как это не бросает исключение NullReferenceException? Поскольку он никогда не инициализировался в этом кодовом блоке