在Autodesk Inventor中迭代NameValueMap

时间:2017-09-07 16:22:46

标签: c# autodesk-inventor

我尝试使用基于0的索引迭代NameValueMap但它不起作用。使用基于1的索引迭代它。

没用。

rel_class

的工作。

rel_class: [:OwnsAccount, :ManagesAccount]

我很惊讶。这是预期的吗?

我还注意到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]; } } 继承了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]; } } 。我尝试使用NameValueMap获取IEnumerable的项目。但是,这只给了我项目的价值。有没有办法获得物品的名称?

foreach

2 个答案:

答案 0 :(得分: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: ...
}

答案 1 :(得分:0)

因为 NameValueMaps 不包含很多元素,你也可以只返回一个完整的 Dictionary,而不是产生 KeyValuePair 元素。这使您可以访问一些方便的方法,例如 .TryGetValue()

public static class NameValueMapExtensions
{
    public static IDictionary<string, object> ToDictionary(this NameValueMap nameValueMap)
    {
        var dictionary = new Dictionary<string, object>();
        for (var i = 1; i <= nameValueMap.Count; i++)
            dictionary.Add(nameValueMap.Name[i], nameValueMap.Value[nameValueMap.Name[i]]);
        return dictionary;
     }
}