예제 #1
0
파일: CastrClass.cs 프로젝트: nasa03/Castr
        public TNewClass CastAsClass <TNewClass>() where TNewClass : class
        {
            if (_classOptions.IsStrict &&
                !ClassHelper.AreClassesRelated <TExistingClass, TNewClass>())
            {
                throw new CastingException("Only related classes can be cast where option strict is set");
            }

            var newObject = Activator.CreateInstance <TNewClass>();
            var newProps  = typeof(TNewClass).GetProperties();

            foreach (var prop in newProps)
            {
                if (!prop.CanWrite)
                {
                    continue;
                }

                var existingPropertyInfo = typeof(TExistingClass).GetProperty(prop.Name);
                if (existingPropertyInfo == null || !existingPropertyInfo.CanRead)
                {
                    continue;
                }
                var value = existingPropertyInfo.GetValue(_existingClass);

                prop.SetValue(newObject, value, null);
            }

            return(newObject);
        }