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;
}