2017-09-07 8 views
0

0ベースのインデックスを使用してNameValueMapを反復しようとしましたが、動作しませんでした。 1ベースのインデックスを使用して反復処理を行いました。Autodesk InventorのNameValueMapを反復する

動作しませんでした。

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]; 
    } 
} 

Worked。

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]; 
    } 
} 

私はそれに驚きました。それは期待されていますか?

また、NameValueMapIEnumerableを継承していることに気付きました。私はforeachを使ってNameValueMapのアイテムを入手しようとしました。しかし、それは私にアイテムの価値を与えただけです。アイテムの名前を取得する方法はありますか?

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; 
    } 
} 

答えて

0

あり、インターネット上でこのNameValueMapにはほとんど情報があるので、を利用する既存の方法があるかどう伝えるのは難しいです。

しかし、あなたは常にあなたのニーズに合わせて拡張メソッドを作成することができます答えを

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

感謝を。私はC#の初心者です。 –