Да, он всегда указывает на «голову», поскольку версионные развертывания доступны только для дополнений Gmail.
Вышеуказанное основано на том, что единственное руководство по публикации надстройки Gmail включает в себя шаг создания версионного развертывания -> https://developers.google.com/gmail/add-ons/ как-тос / публиковать # step_1_create_a_versioned_deployment
Используйте Enumerable.Except
и, в частности, перегрузку , которая принимает IEqualityComparer
:
var complement = c2.Except(c1, new MyTypeEqualityComparer());
Обратите внимание, что это приводит к заданной разнице и, таким образом, дублирует в c2
появится только в результирующем IEnumerable
один раз. Здесь вам нужно реализовать IEqualityComparer
как что-то вроде
class MyTypeEqualityComparer : IEqualityComparer<MyType> {
public bool Equals(MyType x, MyType y) {
return x.Id.Equals(y.Id);
}
public int GetHashCode(MyType obj) {
return obj.Id.GetHashCode();
}
}
При использовании C # 3.0 + Linq:
var complement = from i2 in c2
where c1.FirstOrDefault(i1 => i2.Id == i1.Id) == null
select i2;
Проходить по дополнению, чтобы получить предметы.
public class MyTypeComparer : IEqualityComparer<MyType>
{
public MyTypeComparer()
{
}
#region IComparer<MyType> Members
public bool Equals(MyType x, MyType y)
{
return string.Equals(x.Id, y.Id);
}
public int GetHashCode(MyType obj)
{
return base.GetHashCode();
}
#endregion
}
Затем, используя Linq:
c3 collection = new collection().add(c1);
c3.add(c2);
var items = c3.Distinct(new MyTypeComparer());
Вы также можете сделать это, используя обобщения и предикаты. Если вам нужен образец, дайте мне знать.