我正在尝试向DataGrid
动态添加新记录。我使用HashSet来防止重复。但当我想将对象从HashSet
添加到ObservableCollection
时,我会得到错误:
无法将带有[]的索引应用于类型为"System.Collections.Generic.IEnumerable<gt;。
我已经实现了IEnumerable
。
AdminWindow.xaml.cs
类中的构造函数:
public AdminWindow()
{
InitializeComponent();
ObservableCollection<Alert> alertToDataGrid = new ObservableCollection<Alert>();
for (int i = 0; i < Alert.alerts.Count; i++)
{
alertToDataGrid.Add(Alert.alerts[i]); //Here is the issue
}
AlertTable.ItemsSource = alertToDataGrid;
}
Alert
类:
public class Alert : IEnumerable<Alert>
{
private string id;
private DateTime date;
private string email;
private string nameOfAlert;
private string typeOfAlert; // will be enum later
public static HashSet<Alert> alerts = new HashSet<Alert>();
public override string ToString()
{
return id + "n" + Date+ "n" + email + "n" + nameOfAlert + "n" + typeOfAlert;
}
public override bool Equals(object obj)
{
return obj is Alert alert &&
id == alert.id &&
Id == alert.Id;
}
public override int GetHashCode()
{
return HashCode.Combine(id, Id);
}
// Tried just to return Enumerator
public IEnumerator<Alert> GetEnumerator()
{
foreach (Alert alert in alerts)
{
yield return alert;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
public Alert(string id, DateTime date , string email, string nameOfAlert, string typeOfAlert)
{
this.Id = id;
this.Date = date;
this.Email = email;
this.NameOfAlert = nameOfAlert;
this.TypeOfAlert = typeOfAlert;
}
public string Id { get => id; set => id = value; }
public string Email { get => email; set => email = value; }
public string NameOfAlert { get => nameOfAlert; set => nameOfAlert = value; }
public string TypeOfAlert { get => typeOfAlert; set => typeOfAlert = value; }
public DateTime Date { get => date; set => date = value; }
}
您也可以尝试
foreach (Alert alert in Alert.alerts) {
alertToDataGrid.Add(alert);
}
请参阅如何通过哈希集进行枚举?有关更多详细信息,
如前所述,不能对HashSet
使用索引。如果你坚持使用HashSet
,你可以试试alertToDataGrid.Add(Alert.alerts.ElementAt(i));
。您需要包含System.Linq
。
不能使用[]
,即HashSet
上的索引运算符,因为它是无序的数据结构,不支持索引。因此,它不是关于DataGrid
,而是关于HashSet
,而不是for
循环。请使用foreach
循环来迭代HashSet
或任何其他不支持索引的IEnumerable
。