view Tools/CodeGenerator/Convert.Declare.cs @ 5:f7d63a092920

Исправлено условие Where в тех случаях, когда репозитарий не является генериком
author cin
date Tue, 10 Mar 2015 16:02:11 +0300
parents f990fcb411a9
children
line wrap: on
line source

using System;

[assembly: CLSCompliant(true)]

namespace BLToolkit.Common
{
	public class TypeHelper
	{
		public static bool IsSameOrParent(Type type,Type type1)
		{
			return true;
		}
	}

	public interface IConvertible<T,P>
	{
		T From(P p);
	}

	public static partial class Convert<T,P>
	{
		public static IConvertible<T,P> Instance = GetConverter();

		private static IConvertible<T,P> GetConverter()
		{
			if (TypeHelper.IsSameOrParent(typeof(T), typeof(P)))
			{
				return (IConvertible<T,P>)(object)(new ConvertAssignable<P,P>());
			}

			return new ConvertExplicit<T,P>();
		}
	}

	internal class ConvertAssignable<T,P>: IConvertible<T,P> where P: T
	{
		T IConvertible<T,P>.From(P p) { return p; }
	}

	internal class ConvertDefault<T,P>: IConvertible<T,P>
	{
		T IConvertible<T,P>.From(P p) { return (T)System.Convert.ChangeType(p, typeof(T)); }
	}

	internal partial class ConvertPartial<T,P>: ConvertDefault<T,P>
	{
	}

	internal partial class ConvertExplicit<T,P>: ConvertPartial<T,P>
	{
	}
}

namespace BLToolkit.Properties
{
	public class Resources
	{
		public const string Convert_InvalidCast = "{0} {1}";
	}
}