objet de tableau de chaînes
Je suis en train de convertir un objet (est déclaré ici comme 'obj': l'objet est la matrice de, primitive) à un tableau de chaînes.
objet peut être n'importe quoi, uint[], int16[], etc.
J'ai essayé d'utiliser
string[] str = Array.ConvertAll<object, string>((object[])obj, Convert.ToString);
Le problème survient lorsque j'essaie de lancer le type inconnu d'objet en objet[].
J'ai obtenu une erreur de casting.
Une tentative que j'ai faite, qui a échoué, a été l'aide de
object[] arr = (object[])obj;
ou
IEnumerable<object> list = obj as IEnumerable<object>
object[] arr = (object[])list;
J'ai vu des offres concernant le type de la valeur de référence et le type de question sur casting.
Y aurait-il un code simple qui peut gérer un casting pour objet[] quel que soit le type d'objet, tant que c'est un tableau ?
Je suis en essayant d'éviter la manutention manuelle de chaque type de coulée.
merci d'avance
- Vous ne pouvez pas convertir des tableaux de types de valeur à
object[]
, ils ne sont pas compatibles.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le fait que chaque tableau met en œuvre
IEnumerable
:Ce sera la boîte de primitives de façon appropriée, avant de les convertir en chaînes.
La raison de la conversion échoue, c'est que bien que les tableaux de référence types sont covariants, des tableaux de valeur les types ne sont pas:
Casting juste
IEnumerable
va fonctionner, cependant. Heck, vous pourriez lancer àArray
si vous le souhaitez.object[]
, et nous ne connaissons pas le type de l'avance.IEnumerable
, pourquoi voulez-vous lancer esplicity ?obj
est déclaré justeobject
, qui est la façon dont j'ai lu la question.object[]
est présenté comme la seuleobject
.objs.Select(obj => obj.ToString())
exige simplement queobjs
implémenteIEnumerable<T>
oùT
a unToString()
méthode.IEnumerable
, mais pasIEnumerable<object>
obj
est passé à partir de VBScript et contient un élément avec une valeur Vide. Dans ce cas, une exception avec le message "la référence d'Objet n'est pas définie à une instance d'un objet." est déclenché.Si c'est toujours d'une collection d'un certain type (tableau, liste, etc ...) puis lancez le dos à la plaine de vieux
System.Collections.IEnumerable
et à partir de làIci est un plus approfondie de la mise en œuvre qui traite de la non-collections ainsi
mon exemple: