ImmutableProxy.cs

56 lines | 1.051 kB Blame History Raw Download
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tools.PdfProvider
{
    public class ImmutableProxy<T>
    {
        public T Data { private set; get; }


        public ImmutableProxy(T data)
        {
            Data = data;
        }
        public static ImmutableProxy<T> Create(T data)
        {
            return new ImmutableProxy<T>(data);
        }


        public ImmutableProxy<T> MutateValue(Func<T, T> mutateFunc)
        {
            Data = mutateFunc(Data);
            return this;
        }


        #region override

        public override bool Equals(object obj)
        {
            return Data.Equals(obj);
        }

        public override int GetHashCode()
        {
            return Data.GetHashCode();
        }

        public override string ToString()
        {
            return Data.ToString();
        }

        #endregion

        public static implicit operator T(ImmutableProxy<T> proxy)
        {
            return proxy.Data;
        }
    }
}