J'ai cette propriété, qui fonctionne très bien:ne peut pas réduire l'interface
public IEnumerable<IGrouping<MessageType, Message>> MessageGroups
{
get
{
return
(from msg in _messages
orderby msg.Type descending
group msg by msg.Type);
}
}
Cependant, il me cause d'avoir à répéter le laid prospectifs IEnumerable<IGrouping<MessageType, Message>>
en plusieurs endroits dans mon code. J'ai essayé de rendre cela plus facile sur les yeux en définissant une interface wrapper trivial comme ceci:
public interface IMessageGroups :
IEnumerable<IGrouping<MessageType, Message>> { }
et modification de la propriété ci-dessus pour:
public IMessageGroups MessageGroups
{
get
{
return
(IMessageGroups)
(from msg in _messages
orderby msg.Type descending
group msg by msg.Type);
}
}
Cela se construit bien, mais lors de l'exécution que je reçois:
Impossible de jeter l'objet de type 'System.Linq.GroupedEnumerable`3 [message MessageType, message]' taper 'IMessageGroups'.
(namespaces spécifiques au projet retirés du message d'erreur)
Que puis-je faire pour résoudre ce problème?
Vous devez renvoyer un objet 'MessageGroups' qui met en oeuvre la Interface 'IMessageGroups'. 'IEnumerable>' n'implémente pas l'interface 'IMessageGroups'. –
dtb
Il me semble que vous pourriez éviter complètement le problème en ne l'exposant pas comme une propriété publique. Exposez simplement une propriété IEnumerable et autorisez votre code client à exécuter une requête LINQ simple. À mon avis, il n'y a pas grand intérêt à encapsuler une opération de regroupement simple, car les résultats seront presque toujours utilisés dans le cadre d'une autre requête, auquel cas vous pourriez tout aussi facilement générer une nouvelle requête de regroupement –
cordialgerm