Esempio n. 1
0
 private bool TryGetOwnValue <T>(FieldKey key, Entity context, out T value)
 {
     if (OwnValues != null)
     {
         object @objectValue;
         if (OwnValues.TryGetValue(key, out @objectValue))
         {
             if (objectValue is T tValue)
             {
                 value = tValue;
                 return(true);
             }
             else
             {
                 var producer = objectValue as IValueProducer <T>;
                 if (producer != null)
                 {
                     value = producer.Produce(context);
                     return(true);
                 }
                 else
                 {
                     try
                     {
                         value = (T)Convert.ChangeType(objectValue, typeof(T));
                         return(true);
                     }
                     catch
                     {
                         var format  = "Unexpected field type. Expect {0}, got {1}";
                         var message = String.Format(format, typeof(T).Name, objectValue.GetType().Name);
                         throw new Exception(message);
                     }
                 }
             }
         }
     }
     value = default(T);
     return(false);
 }
Esempio n. 2
0
        public void Merge(FieldList other)
        {
            var fieldKey = SystemField.DeletedKeys.ToFieldKey();

            if (other.TryGetValue(fieldKey, out object value))
            {
                var deletedKeys = value as List <FieldKey>;
                if (deletedKeys != null)
                {
                    foreach (var key in deletedKeys)
                    {
                        this.Remove(key);
                    }
                }
                other.Remove(fieldKey);
            }

            foreach (var pair in other)
            {
                this[pair.Key] = pair.Value;
            }
        }