using System; using System.Collections; using System.Collections.Specialized; using System.Linq; namespace Unity.VisualScripting { public sealed class DictionaryValueAtIndexMetadata : DictionaryIndexMetadata { public DictionaryValueAtIndexMetadata(int index, Metadata parent) : base(SubpathPrefix, index, parent) { } protected override object rawValue { get { if (parentIsOrderedDictionary) { return ((IOrderedDictionary)parent.value)[index]; } else { return ((IDictionary)parent.value).Values.Cast().ElementAt(index); } } set { if (parentIsOrderedDictionary) { ((IOrderedDictionary)parent.value)[index] = value; } else { var key = ((IDictionary)parent.value).Keys.Cast().ElementAt(index); ((IDictionary)parent.value)[key] = value; } } } protected override Type GetDefinedType(Type dictionaryType) { return TypeUtility.GetDictionaryValueType(dictionaryType, true); } public const string SubpathPrefix = "__valueAt."; } }