2017-09-07 1 views
0

J'ai essayé d'effectuer une itération sur un NameValueMap en utilisant un index 0, mais cela n'a pas fonctionné. Itération sur elle en utilisant un index basé sur 1 travaillé.Itération sur un NameValueMap dans Autodesk Inventor

Ne fonctionne pas.

public static void onParameterChange(_Document document, 
            Inventor.Parameter parameter, 
            EventTimingEnum BeforeOrAfter, 
            NameValueMap context , 
            out HandlingCodeEnum handlingCode) 
{ 
    handlingCode = HandlingCodeEnum.kEventHandled; 

    // Did not work. Got an exception. 
    for (int i = 0; i < context.Count; ++i) 
    { 
     string name = context.Name[i]; 
     string value = (string)context.Value[name]; 
    } 
} 

Travail effectué.

public static void onParameterChange(_Document document, 
            Inventor.Parameter parameter, 
            EventTimingEnum BeforeOrAfter, 
            NameValueMap context , 
            out HandlingCodeEnum handlingCode) 
{ 
    handlingCode = HandlingCodeEnum.kEventHandled; 

    // Worked. 
    for (int i = 1; i <= context.Count; ++i) 
    { 
     string name = context.Name[i]; 
     string value = (string)context.Value[name]; 
    } 
} 

J'ai été surpris par cela. Est-ce prévu? J'ai également remarqué que NameValueMap hérite IEnumerable. J'ai essayé d'utiliser foreach pour obtenir les éléments du NameValueMap. Cependant, cela ne m'a donné que les valeurs des articles. Y a-t-il un moyen d'obtenir les noms des articles aussi?

public static void onParameterChange(_Document document, 
            Inventor.Parameter parameter, 
            EventTimingEnum BeforeOrAfter, 
            NameValueMap context , 
            out HandlingCodeEnum handlingCode) 
{ 
    handlingCode = HandlingCodeEnum.kEventHandled; 

    foreach (var item in context) 
    { 
     // How do you get the name? 
     string value = item; 
    } 
} 

Répondre

0

Il y a peu d'informations sur ce NameValueMap sur Internet, il est donc difficile de dire s'il existe une méthode existante pour tirer profit.

Cependant, vous pouvez toujours créer une méthode d'extension en fonction de vos besoins:

public static class NameValueMapExtensions 
{ 
    public static IEnumerable<KeyValuePair<string, T>> AsEnumerable<T>(this NameValueMap map) 
    { 
     for (int i = 1; i <= map.Count; i++) 
      yield return new KeyValuePair<string, T>(
       map.Name[i], (T)map.Values[i]); 
    } 
} 

// ... 

foreach (var item in context.AsEnumerable()) 
{ 
    // item.Key: Name 
    // item.Value: ... 
} 
+0

Merci pour la réponse. Je suis nouveau à C# et je vais avoir besoin de temps pour le faire. –