bool CanInsertElementOfType(IExpressionElement lastElem, IExpressionElement elemToAdd) { var map = lastElement_possibleTypesOfNext_map; // интерфейс, реализуемый элементом и имеющийся в настройках var keyType = lastElem == null ? typeToStartExpressionWith : lastElem.GetType() .GetInterfaces() .First(i => map.ContainsKey(i)); var possibleTypes = map[keyType]; // имеется ли в настройках интерфейс, реализуемый элементом var result = possibleTypes .Any(t => elemToAdd.GetType() .GetInterfaces() .Contains(t)); return(result); }