KnowledgeBase.KB.internal_RegistDynamicProperty C# (CSharp) Method

internal_RegistDynamicProperty() private method

private internal_RegistDynamicProperty ( Name propertyName, string description, MethodInfo surogate, DynamicPropertyCalculator converted ) : void
propertyName Name
description string
surogate MethodInfo
converted DynamicPropertyCalculator
return void
        private void internal_RegistDynamicProperty(Name propertyName, string description, MethodInfo surogate, DynamicPropertyCalculator converted)
        {
            if (!propertyName.IsPrimitive)
                throw new ArgumentException("The property name must be a primitive symbol.", nameof(propertyName));

            var p = surogate.GetParameters();
            var propertyParameters = p.Skip(1).Select(p2 => (Name) $"[{p2.Name}]").ToArray();
            var template = Name.BuildName(propertyParameters.Prepend(propertyName));

            var r = m_dynamicProperties.Unify(template).FirstOrDefault();
            if (r != null)
                throw new ArgumentException($"There is already a registed property with the name {propertyName} that receives {p.Length - 3} parameters.");

            if (m_knowledgeStorage.Unify(template).Any())
                throw new ArgumentException($"There are already stored property values that will collide with the given dynamic property.");

            m_dynamicProperties.Add(template, new DynamicKnowledgeEntry(converted,propertyParameters, description));
        }