Предположим, нам даны два списка (может быть любого типа примитива):
var arguments = new List<String>() {"a", "b", "c", "d", "e", "f", "g", "h"};
var required = new List<String>() {"c", "g"};
Все значения требуемого списка должны быть в списке аргументов.Если ничего не пропущено, вернуть null, иначе вернуть список отсутствующих аргументов.О, и требуемые значения не могут встречаться несколько раз, если это так, следует выдать исключение.
Это то, что мне удалось собрать:
private static IList<string> FindMissingRequiredValues(List<string> required, List<string> arguments)
{
var missing = new List<string>();
foreach (var r in required)
{
if (!arguments.Contains(r))
missing.Add(r);
}
if (missing.Count == 0)
missing = null;
return missing;
}
Это работает, но это нене заботиться о дубликатах, и это выглядит некрасиво.Есть ли элегантное решение, которое является общим (работает для любого примитивного типа) и позаботится о дубликатах, возможно, с помощью linq?
Опять же для пояснения должны быть выполнены следующие условия:
1)Если одно (или несколько) из обязательных значений встречаются в списке аргументов несколько раз, выдается ошибка.Это учитывает только обязательные значения, другие значения могут встречаться несколько раз в списке аргументов.
2) Должно работать для любого примитивного типа данных
3) Возвращать ноль, если все требуемые значения встречаются ровно один раз.в списке аргументов.
4) Если в списке аргументов отсутствуют некоторые обязательные значения, возвращает список отсутствующих.