Конечно, вам нужен пользовательский IEqualityComparer
с Union
. У меня есть тот, который действительно динамический, большой блок кода, входящий, хотя:
public class PropertyEqualityComparer<TObject, TProperty>
: IEqualityComparer<TObject>
{
Func<TObject, TProperty> _selector;
IEqualityComparer<TProperty> _internalComparer;
public PropertyEqualityComparer(Func<TObject, TProperty> propertySelector,
IEqualityComparer<TProperty> innerEqualityComparer = null)
{
_selector = propertySelector;
_internalComparer = innerEqualityComparer;
}
public int GetHashCode(TObject obj)
{
return _selector(obj).GetHashCode();
}
public bool Equals(TObject x, TObject y)
{
IEqualityComparer<TProperty> comparer =
_internalComparer ?? EqualityComparer<TProperty>.Default;
return comparer.Equals(_selector(x), _selector(y));
}
}
public static class PropertyEqualityComparer
{
public static PropertyEqualityComparer<TObject, TProperty>
GetNew<TObject, TProperty>(Func<TObject, TProperty> propertySelector)
{
return new PropertyEqualityComparer<TObject, TProperty>
(propertySelector);
}
public static PropertyEqualityComparer<TObject, TProperty>
GetNew<TObject, TProperty>
(Func<TObject, TProperty> propertySelector,
IEqualityComparer<TProperty> comparer)
{
return new PropertyEqualityComparer<TObject, TProperty>
(propertySelector, comparer);
}
}
Теперь вам нужно всего лишь позвонить в Союз с помощью этого компаратора равенства (созданного с помощью лямбда, который соответствует вашим обстоятельствам):
var tr = List1.Union(List2, PropertyEqualityComparer.GetNew(n => n.Id)).ToList();
Библиотеки xcb разделены на несколько разных пакетов; Получается, что вам нужно явно использовать библиотеки xcb
и xcb-randr
:
... `pkg-config --cflags --libs xcb xcb-randr`
Возможно, ваш дистрибутив Linux отдельно упаковывает библиотеку randr. Проверяя Fedora, он упаковывает и xcb, и xcb-rand в подпакет libxcb-devel
; но возможно, что ваш дистрибутив Linux имеет отдельный подпакет libxcb-randr-devel
, который вам нужно установить.
Большое спасибо n.m.
и G.M.
.
Я не связывал xcb-randr
.
Решение:
clang++ main.cpp -o main `pkg-config --cflags --libs xcb` -lxcb-randr