public override bool IsAssignableFrom(PLanguageType otherType) { // Copying semantics: both the other key and value types must be subtypes of this key/value type. return(otherType.Canonicalize() is MapType other && KeyType.IsAssignableFrom(other.KeyType) && ValueType.IsAssignableFrom(other.ValueType)); }
public void Add(object key, object value) { if (!KeyType.IsAssignableFrom(key.GetType())) { key = TypeDescriptor.GetConverter(KeyType).ConvertFrom(key); } Dictionary.Add(key, value); }
public override bool MatchNode(NodeViewModel node) { if (node.HasDictionary && node.NodeValue != null) { var dictionaryType = node.NodeValue.GetType(); if (dictionaryType.IsGenericType) { var genericTypes = dictionaryType.GetGenericArguments(); if (genericTypes.Length == 2) { return((KeyType == null || KeyType.IsAssignableFrom(genericTypes[0])) && (ValueType == null || ValueType.IsAssignableFrom(genericTypes[1]))); } } } return(false); }