У меня есть класссравнить 2 списков с одним имеющих нулевые значения
public class User
{
public int id { get; set; }
public string code { get; set; }
}
И я хочу, чтобы найти пользователей с определенным значением кода
List<User> users = new List<User>();
users.Add(new User() { id = 1, code="A"});
users.Add(new User() { id = 2, code = null });
users.Add(new User() { id = 3, code = "C" });
users.Add(new User() { id = 4, code = "C" });
users.Add(new User() { id = 5, code = "B" });
string[] possibleValues = new string[] { null, "A", "B" };
var result = users
.Where(u => possibleValues
.Any(l => l.Equals(u.code)))
.ToList();
я получаю NullReferenceException
потому что possibleValues
имеет null
в Это. Я это понимаю. Может кто-то предложить лучший способ сделать это.
Здесь вы можете просто использовать оператор '=='. Когда вы смотрите в [Строковый код] (https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/string.cs), то оператор '==' имеет этот код: 'public static bool operator = = (String a, String b) { return String.Equals (a, b); } '. Таким образом, этот код 'possibleValues.Any (l => l == u.code)' будет работать нормально. – dee
Да, я согласен с вами. Я понял это, посмотрев на ответ Дмитрия. Однако. Я предпочитаю его ответ, потому что это дает мне гибкость добавления StringComparison.OrdinalIgnoreCase – Rajat
Итак, в этом случае вам действительно нужно вызвать статический метод 'string.Equals' напрямую, потому что' == 'оператор на' string' выполняет 'порядковый номер (случай -чувствительный и нечувствительный к культуре). – dee