#define VARIABLE 3
#define NAME2(fun,suffix) fun ## _ ## suffix
#define NAME1(fun,suffix) NAME2(fun,suffix)
#define NAME(fun) NAME1(fun,VARIABLE)
int NAME(some_function)(int a);
Честно говоря, вы не хотите знать, почему это работает. Если вы знаете, почему это работает, вы станете этим парнем на работе, который знает такие вещи, и все придут задавать вам вопросы. =)
Редактирование: если вы действительно хотите знать, почему это работает, я с радостью опубликую объяснение, полагая, что меня никто не бьет.
Вы можете сделать это через RemoveAll, используя Contains:
list.RemoveAll( item => !list2.Contains(item));
В качестве альтернативы, если вы просто хотите пересечение, используйте Enumerable.Intersect , который будет более эффективным:
list = list.Intersect(list2).ToList();
Разница в том, что в последнем случае вы не получите повторяющиеся записи. Например, если list2
содержит 2, в первом случае вы получите {2,2,4,5}
, во втором - {2,4,5}
.
Решение для объектов (может быть, проще, чем решение horaces):
Если ваш список содержит объекты, а не скаляры, это так просто, удалив одно выбранное свойство объектов:
var a = allActivePatientContracts.RemoveAll(x => !allPatients.Select(y => y.Id).Contains(x.PatientId));
Этот вопрос был помечен как ответивший, но есть одна загвоздка. Если ваш список содержит объект, а не скаляр, вам нужно проделать немного больше работы.
Я пробовал это снова и снова с помощью Remove () и RemoveAt () и всякого рода вещей, и ни одна из них не работала правильно. Я даже не мог заставить Contains () работать правильно. Никогда ничего не соответствовало. Я был в тупике до тех пор, пока у меня не возникло подозрения, что, возможно, он не может правильно подобрать предмет.
Когда я понял это, я провел рефакторинг класса item для реализации IEquatable, и тогда он начал работать.
Вот мое решение:
class GenericLookupE : IEquatable<GenericLookupE>
{
public string ID { get; set; }
public bool Equals( GenericLookupE other )
{
if ( this.ID == other.ID ) return true;
return false;
}
}
После того, как я это сделал, приведенный выше ответ RemoveAll () Рида Копси отлично сработал для меня.
.