C# convertit l'objet de tableau de type T, où T est un tableau?
Ce serait vraiment bien si je pouvais obtenir un objet à un tableau de conversion de travail.
Suit:
- On se passer d'un tableau à partir d'une source externe. Le tableau est encadré dans un objet. Généralement l'objet est un int[] ou double[], mais normalement, nous voulons double[].
- Convertir un tableau de Type T.
- retour de la conversion de type.
Pour commencer, cela fonctionne bien
double[] r=Array.ConvertAll<int,double>((int[])o,Convert.ToDouble)
mais ce n'est pas (à supposer que T est le "double") par exemple, le double[] R=getValue(o);
public T[] getValue<T>(object o){
//... some logic...
return (T[])Array.ConvertAll<int,double>((int[])o,Convert.ToDouble)
Est-il lorsque la contrainte qui peut être utilisé? Tableau est un "Objet", on ne peut donc pas l'utiliser comme une contrainte.
Est-ce possible dans .net sans avoir recours à l'-t-IL? Est-il possible si nous ne recourir à l'-t-IL?
grâce,
-Steven
- Tu veux dire quoi par "le recours à l'IL"? Avez-vous l'intention d'écrire personnalisé IL code pour contourner ce problème?
Vous devez vous connecter pour publier un commentaire.
Cela a fonctionné pour moi:
J'espère que cela aide!
Essayez ceci:
Utiliser comme ceci:
Notez que si vous passez dans le mauvais type pour le modèle, il ne sera pas au moment de l'exécution
-- Supprimé contenu précédent
Désolé, je ne vois pas la Convertir.ToDouble qui ne sera évidemment pas compiler. Pour être en mesure de gérer tout type de T vous devez passer un convertir de rappel à
getValue
.Quelque chose comme cela devrait faire l'affaire:
Utilisation:
Convert
classe permet de fournir une surcharge qui prend unint
, de sorte que le code ci-dessus serait de compiler. (Il existe également une surcharge qui prendobject
de sorte qu'il serait possible de modifier la fonction générique pour prendreobject
plutôt queint
-- ce serait ajouter la possibilité d'erreurs à l'exécution de la conversion dans l'exemple de l'utilisation.)bien l'ensemble des trois réponses ci-dessus, le travail. Génial. Merci beaucoup.
Une question: dans la notation ci-dessus
Convert.ToDouble
en l'appelant est devenu(i) => Convert.ToDouble(i)
. Est la notation équivalent?Je suis nouveau ici... je suis censé accepter une réponse en quelque sorte? Vous ne savez pas si je peux, parce que lorsque j'ai posté la question, je n'étais pas inscrit.
Dans une extension pour les réponses ci-dessus, j'ai eu ce travail qui est très soigné solution:
utilisation:
L'une des choses que j'ai essayé était à l'origine pour avoir le T (où T est un n-rang de la matrice de), obtenir le type d'élément, puis faire la conversion. Il ne fonctionne pas trop bien quand il est venu à la restitution de la valeur de la fonction.
Pour ce faire encore plus proprement, ça serait bien si on pouvait faire les surcharges avec les valeurs de retour de fonction... mais à ma connaissance ce n'est pas possible en C# par la conception. Peut-être il y a un autre truc. Aussi essayé d'Étain + TOut en vain (l'Étain est double, et TOut est
double[]
/double[,]
/double[,,]
.Merci encore.