Если вас не беспокоят дубликаты, или вы беспокоитесь о дубликатах, но не слишком обеспокоены микрооптимизацией производительности, тогда различные методы в ответе Джона определенно являются подходящим вариантом.
ЕслиВы беспокоитесь о производительности дубликатов и , тогда что-то вроде этого метода расширения должно сработать, хотя оно действительно не соответствует вашим критериям "кратчайшего кода"!
bool hasSameElements = A.HasSameElements(B);
// ...
public static bool HasSameElements<T>(this IList<T> a, IList<T> b)
{
if (a == b) return true;
if ((a == null) || (b == null)) return false;
if (a.Count != b.Count) return false;
var dict = new Dictionary<string, int>(a.Count);
foreach (string s in a)
{
int count;
dict.TryGetValue(s, out count);
dict[s] = count + 1;
}
foreach (string s in b)
{
int count;
dict.TryGetValue(s, out count);
if (count < 1) return false;
dict[s] = count - 1;
}
return dict.All(kvp => kvp.Value == 0);
}
(Примечаниечто этот метод вернет true
, если обе последовательности null
. Если это не желаемое поведение, то достаточно просто добавить дополнительные null
проверки.)