Я видел ответы, упоминающие что-то компактное: здесь
List<T> withDupes = LoadSomeData();
List<T> noDupes = withDupes.Distinct().ToList();
Итак, я попробовал следующее (синтаксис)
List<InfoControl> withDupes = (List<InfoControl>)listBox1.ItemsSource;
listBox1.ItemsSource = withDupes.Distinct().ToList();
а withDupes равно нулю? Возможно, я получаю неправильный список данных. Я добавил инфо-элементы управления по одному.
Есть ли что-то еще, что я должен реализовывать в классе InfoControl? (Равно, хэш-код)
Спасибо
Приложение 1: [игнорировать, я не должен переводить с Java :)]
Также (переведен из примера Java, не уверен, что он на 100% правильный) объявлен в классе InfoControl ..
public Boolean Equals(Object obj)
{ if (obj == this) { return true; }
if (!(obj is InfoControl)) { return false; }
InfoControl other = (InfoControl)obj;
return this.URL.Equals(other.URL); }
public int hashCode()
{ return this.URLFld.Content.GetHashCode(); }
Приложение 2:
Когда я пытаюсь использовать переопределение на основе примера пользовательского типа ссылки msdn, он говорит, что он запечатан
Кажется, что нет четкого шага через GetHashCode (), и я все еще получаю тот же listbox.items.count после отчетливого.
bool IEquatable<InfoControl>.Equals(InfoControl other)
{
if (Object.ReferenceEquals(other, null)) return false;
if (Object.ReferenceEquals(this, other)) return true;
return URL.Equals(other.URL);
}
public int GetHashCode(InfoControl obj)
{
return obj.URL.GetHashCode();
}
Приложение 3:
Когда я пытаюсь переопределить VS2010 говорит, что он запечатан? «не может переопределить унаследованный член« System.Windows.DependencyObject.GetHashCode () », потому что он запечатан« что я делаю не так?
public override int GetHashCode()
{
return URL.GetHashCode();
}
public string URL
{
get { return this.URLFld.Content.ToString() ; }
set
{
this.URLFld.Content = value;
}
}
.
Приложение 4:
public partial class InfoControl : UserControl
, IEquatable<YouTubeInfoControl>
{
private string URL_;
public string URL
{
get { return URL_; }
set
{
URL_ = value;
}
}
bool IEquatable<YouTubeInfoControl>.Equals(YouTubeInfoControl other)
{
if (Object.ReferenceEquals(other, null)) return false;
if (Object.ReferenceEquals(this, other)) return true;
return URL == other.URL;
}
public override int GetHashCode()
{
return URL.GetHashCode();
}
}