Je viens de me heurter au problème "les conversions définies par l'utilisateur vers ou à partir d'une interface ne sont pas autorisés" en C#. Ce que je tentais de faire était de créer une classe graphique générique qui pourrait être répétée de deux manières différentes, en fonction de l'interface supportée. Alors:conversion définie par l'utilisateur à l'interface
public class Graph<T> : IBreadthFirstSearchTree<T>, IDepthFirstSearchTree<T>
{
// unnecessary details
public static explicit operator IBreadthFirstSearchTree<T>(Graph<T> g)
{
g.enumerator = new GraphEnumerator<T>(g, SortStrategy.BreadthFirst);
return g as IBreadthFirstSearchTree<T>;
}
public static explicit operator IDepthFirstSearchTree<T>(Graph<T> g)
{
g.enumerator = new GraphEnumerator<T>(g, SortStrategy.DepthFirst);
return g as IDepthFirstSearchTree<T>;
}
}
était destiné à cet usage:
foreach (GraphNode<T> gn in myGraph as IDepthFirstSearchTree)
{
// do stuff with gn
}
Quelqu'un sait comment je peux obtenir les mêmes résultats syntaxiques dans les limites de la langue?
Je suis d'accord, je n'aime pas votre utilisation d'interfaces - ce n'est pas vraiment ce pour quoi ils sont destinés –
C'est la syntaxe résultante que je recherchais. J'ai vraiment, vraiment aimé pouvoir dire 'foreach (node dans mygraph comme depthfirstsearchtree)' –
Est-ce que ce code est juste du code hobby pour toi seul? Si c'est le cas, ça va. Sinon, sachez que C# est unidiomatique et que d'autres développeurs peuvent être confus. –