10
votes

MS Word Automation en C # - Impossible de lancer l'objet de type 'system.string [*]' to tapez 'system.string []'

J'utilise ce code pour obtenir une gamme de chaînes d'en-têtes utilisées dans un document MS Word 2007 (.docx): xxx pré>

à l'aide du débogueur, je vois que arr comp Code> est attribué dynamiquement un tableau à chaîne avec des titres de toutes mes en-têtes dans le document (environ 40 entrées). Jusqu'ici tout va bien. P>

Puis, je veux accéder aux cordes, mais peu importe la façon dont je le fais, je reçois l'exception suivante: P>

foreach (String str in arr)
{
   Console.WriteLine(str);
}


1 commentaires

3 Réponses :


8
votes

chaîne [] est un vecteur - une matrice à base de 1-D, 0. String [*] , cependant, est un tableau régulier qui arrive à avoir une dimension . Fondamentalement, vous allez devoir le gérer comme tableau , puis copiez les données out, ou utilisez l'API API plutôt que la chaîne [] API.

Ceci est identique à la différence entre typeof (string) .MakeArrayType () (le vecteur) et typeof (string) .MakeArrayType (1) (A 1 -d non vecteur).


3 commentaires

Pensez-vous que c'est un bogue que le temps d'exécution dynamique tente d'accéder à un tableau comme s'il s'agissait d'un vecteur?


Merci beaucoup pour l'éxplication :)


@Gabe - Oui: Connectez-vous .microsoft.com / VisualStudio / Feedback / Détails / 684538 / ...



7
votes

Essayez xxx


0 commentaires

5
votes

Le problème est que vous utilisez dynamique dans une situation où elle n'a apparemment pas été destinée. Lorsque le runtime dynamique voit un tableau 1D, il suppose un vecteur et tente de l'indexer ou de l'énumérer comme s'il s'agissait d'un vecteur. Ceci est l'un de ces rares cas où vous avez un tableau 1D qui n'est pas un vecteur, vous devez donc le gérer comme un tableau : xxx


2 commentaires

Merci pour votre explication :) Votre première ligne me jette une erreur invalide: impossible de lancer l'objet de type 'system.string [*]' to tapez 'system.string []'.


@sw_lasse: Oups, tu as raison. Je l'ai corrigé. Ma version a fonctionné en C # 3.0 mais s'est cassé en 4.0 en raison de la bogue apparent dans l'accès dynamique d'une matrice non standard.