Beispiel #1
0
        public bool Set(Func <T, T> factory, Action <T, T> postUpdateAction = null)
        {
            var old   = _value == null ? default(T) : _value.Value;
            var value = factory(old);

            if (Equals(old, value))
            {
                return(false);
            }

            if (value != null && old != null && value.GetType().IsArray)
            {
                var a1 = (old as Array).Cast <object>().ToArray();
                var a2 = (value as Array).Cast <object>().ToArray();

                if (a1.Length == a2.Length)
                {
                    var eq = !a1.Where((t, i) => !Equals(t, a2[i])).Any();
                    if (eq)
                    {
                        return(false);
                    }
                }
            }

            _value = new BoxedLazySet(this, factory, value);

            postUpdateAction?.Invoke(old, value);

            return(true);
        }
Beispiel #2
0
 public T Get(Func <T, T> factory, Action <T, T> postUpdateAction = null)
 {
     if (_value == null)
     {
         _value = new BoxedLazy(this, factory, default(T));
     }
     return(_value.Value);
 }
Beispiel #3
0
 public void SetGetter(Func <T, T> valueFactory, T oldValue = default(T))
 {
     if (_value == null)
     {
         if (oldValue == null)
         {
             _value = new BoxedLazy(this, valueFactory, oldValue);
         }
         else
         {
             _value = new BoxedLazySet(this, valueFactory, oldValue);
         }
     }
 }