Archetype.MetaObjects.NestedCastingMetaObject.TryConvert C# (CSharp) Method

TryConvert() protected static method

protected static TryConvert ( ConvertBinder binder, DynamicMetaObject instance, DynamicMetaObject &result ) : bool
binder System.Dynamic.ConvertBinder
instance System.Dynamic.DynamicMetaObject
result System.Dynamic.DynamicMetaObject
return bool
        protected static bool TryConvert( ConvertBinder binder, DynamicMetaObject instance, out DynamicMetaObject result )
        {
            if ( instance.HasValue &&
                 instance.RuntimeType.IsValueType )
            {
                result = instance.BindConvert( binder );
                return true;
            }

            if ( binder.Type.IsInterface )
            {
                Expression expression = Convert( instance.Expression, binder.Type );
                result = new DynamicMetaObject( expression, BindingRestrictions.Empty, instance.Value );
                result = result.BindConvert( binder );
                return true;
            }

            if ( typeof (IDynamicMetaObjectProvider).IsAssignableFrom( instance.RuntimeType ) )
            {
                result = instance.BindConvert( binder );
                return true;
            }

            result = null;
            return false;
        }