J'ai une fonction d'aide pour obtenir des valeurs de XML qui fonctionne bien avec des types de valeur comme ints et aussi des chaînes. J'ai aussi quelques classes qui prennent un XPathNavigator comme paramètre dans leurs constructeurs et je voudrais faire quelque chose comme ce qui suit:Fonction générique qui peut renvoyer des objets de type valeur et référence
public static void SelectSingleNodeSafe<T>(XPathNavigator nav, string pos, out T ret, T def)
{
XPathNavigator node = nav.SelectSingleNode(pos);
if (node != null)
if (typeof(T).IsSubclassOf(XMLConstructible))
ret = new T(node);// this won't compile
else
ret = (T)node.ValueAs(typeof(T));//this works for my use cases
else
ret = def;
}
Il y a une volonté, mais est-il un moyen?
Les chaînes ne sont pas des types de valeurs. –
Le problème est que 'new T (node)' est impossible. Les fonctions génériques peuvent uniquement invoquer des constructeurs par défaut de types paramétrés. – Gabe
duplication possible de [problème constructeur C# générique new()] (http://stackoverflow.com/questions/840261/c-generic-new-constructor-problem) – Donnie