Is Object Unitialized Value

image_pdfimage_print
   
 
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
//    * to copy, distribute, display, and perform the work
//    * to make derivative works
//    * to make commercial use of the work
//
// Under the following conditions:
//    * You must attribute the work in the manner specified by the author or licensor:
//          - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
//    * For any reuse or distribution, you must make clear to others the license terms of this work.
//    * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;

namespace MySpace.Common.IO.JSON.Utilities
{
    internal static class ReflectionUtils
    {
        private static bool IsValueTypeUnitializedValue(ValueType value, Type valueType)
        {
            if (valueType.IsGenericType &amp;&amp; valueType.GetGenericTypeDefinition() == typeof(Nullable<>))
                return (value == null);
            else
                return value.Equals((ValueType)Activator.CreateInstance(valueType));
        }
        public static bool IsObjectUnitializedValue(object value, Type valueType)
        {
            if (valueType.IsValueType)
                return IsValueTypeUnitializedValue((ValueType)value, valueType);
            else if (valueType.IsClass)
                return (value == null);
            else
                throw new ArgumentException("Type is neither a ValueType or a Class", "valueType");
        }
    }
}

   
     


Get Type Unitialized Value

image_pdfimage_print
   
 
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
//    * to copy, distribute, display, and perform the work
//    * to make derivative works
//    * to make commercial use of the work
//
// Under the following conditions:
//    * You must attribute the work in the manner specified by the author or licensor:
//          - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
//    * For any reuse or distribution, you must make clear to others the license terms of this work.
//    * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;

namespace MySpace.Common.IO.JSON.Utilities
{
    internal static class ReflectionUtils
    {

        public static object GetTypeUnitializedValue(Type type)
        {
            if (type.IsValueType)
                return Activator.CreateInstance(type);
            else if (type.IsClass)
                return null;
            else
                throw new ArgumentException("Type is neither a ValueType or a Class", "type");
        }
    }
}

   
     


Is Value Type Unitialized Value

image_pdfimage_print
   
 
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
//    * to copy, distribute, display, and perform the work
//    * to make derivative works
//    * to make commercial use of the work
//
// Under the following conditions:
//    * You must attribute the work in the manner specified by the author or licensor:
//          - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
//    * For any reuse or distribution, you must make clear to others the license terms of this work.
//    * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;

namespace MySpace.Common.IO.JSON.Utilities
{
    internal static class ReflectionUtils
    {

        private static bool IsValueTypeUnitializedValue(ValueType value, Type valueType)
        {
            if (valueType.IsGenericType &amp;&amp; valueType.GetGenericTypeDefinition() == typeof(Nullable<>))
                return (value == null);
            else
                return value.Equals((ValueType)Activator.CreateInstance(valueType));
        }
    }
}

   
     


Is it a Nullable Type

image_pdfimage_print
   
 
#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
//    * to copy, distribute, display, and perform the work
//    * to make derivative works
//    * to make commercial use of the work
//
// Under the following conditions:
//    * You must attribute the work in the manner specified by the author or licensor:
//          - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
//    * For any reuse or distribution, you must make clear to others the license terms of this work.
//    * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;

namespace MySpace.Common.IO.JSON.Utilities
{
    internal static class ReflectionUtils
    {

        public static bool IsNullableType(Type underlyingType)
        {
            if (underlyingType.IsValueType)
            {
                if (!underlyingType.IsGenericType &amp;&amp; typeof(Nullable<>).IsAssignableFrom(underlyingType))
                    return false;
            }
            return true;
        }

    }
}

   
     


Does a given Type have a Default Constructor

image_pdfimage_print
   
 

#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
//    * to copy, distribute, display, and perform the work
//    * to make derivative works
//    * to make commercial use of the work
//
// Under the following conditions:
//    * You must attribute the work in the manner specified by the author or licensor:
//          - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
//    * For any reuse or distribution, you must make clear to others the license terms of this work.
//    * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Collections;
using System.ComponentModel;

namespace MySpace.Common.IO.JSON.Utilities
{
    internal static class ReflectionUtils
    {
        public static bool HasDefaultConstructor(Type t)
        {
            if (t == null)
                throw new ArgumentNullException("t");

            return (t.GetConstructor(BindingFlags.Public | BindingFlags.Instance, null, new Type[0], null) != null);
        }



    }
}

   
     


Change type

image_pdfimage_print
   
 
using System;
using System.ComponentModel;


    public class Convertors
    {
        /// <summary>
        /// See Convert.ChangeType.
        /// </summary>
        /// <typeparam name="T">New type, may be Nullable.</typeparam>
        /// <param name="value">Object</param>
        /// <returns>Typed object.</returns>
        public static T ChangeType<T>(object value)
        {
            Type conversionType = typeof(T);

            if (conversionType.IsGenericType &amp;&amp; conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
            {
                if (value == null)
                {
                    return default(T);
                }
                else
                {
                    NullableConverter nullableConverter = new NullableConverter(conversionType);
                    conversionType = nullableConverter.UnderlyingType;
                }
            }
            return (T)Convert.ChangeType(value, conversionType);
        }
    }