J'ai 2 ObservableCollections, disons de type class1 et class2. Maintenant, dans la méthode ci-dessous, je veux itérer sur cette collection et accéder aux membres de l'objet.Passer ObservableCollection générique à une méthode et itérer dessus
public void MyMethod<T>(){
var listOfLayers = new ObservableCollection<T>();
if (typeof(T) == typeof(Class1))
{
listOfLayers = (T) cOne;
}
else{
listOfLayers = (T) cTwo;
}
foreach (var entry in listOfLayers){
WL entry.someprop;
}
}
Mais il me lance erreur à chaque fois sur la conversion de type.
Error CS0030 Cannot convert type 'System.Collections.ObjectModel.ObservableCollection' to 'T'
S'il vous plaît noter que je ne l'ai pas créé deux méthodes basées sur le type parce que les deux méthodes vont essentiellement faire la même chose dans les tables de base de données séparés. Et donc ils vont tous les deux contenir le code en double.
Merci Florian pour votre excellente réponse. J'ai fait les changements suggérés mais il jette toujours la même erreur: "'System.Collections.ObjectModel.ObservableCollection' à 'System.Collections.ObjectModel.ObservableCollection ' \t". Je pense que je ferais mieux de créer deux méthodes distinctes maintenant, mais ils contiendront plus ou moins le même code. –
Êtes-vous sûr que cette exception ne se produit pas dans la branche else? Donc pourrait-il être que 'typeof (T)! = Typeof (Ajuster IT.Landbase)'? –
Sachez que vous ne pouvez pas convertir en types de base (donc si 'T' est une classe parente de' AdjustIT.Landbase', la distribution échouera), voir cette réponse pourquoi pas: https://stackoverflow.com/a/43378505/2259391 –