本文整理汇总了C#中System.Linq.Expressions.ParameterExpression.Select方法的典型用法代码示例。如果您正苦于以下问题:C# ParameterExpression.Select方法的具体用法?C# ParameterExpression.Select怎么用?C# ParameterExpression.Select使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Linq.Expressions.ParameterExpression
的用法示例。
在下文中一共展示了ParameterExpression.Select方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Convert
public virtual object Convert(object value, Type type, IFormatProvider formatProvider)
{
if (value == null)
{
if (TypeConverter.TypeIsNullable(type))
{
return null;
}
throw new NotSupportedException(string.Format("Unable to convert null to '{0}'", type.FullName));
}
// don't try to convert if value is derived from type
if (type.IsInstanceOfType(value))
{
return value;
}
if (type.IsEnum)
{
var integer = System.Convert.ChangeType(value, typeof(int), formatProvider);
if (integer == null)
{
throw new ArgumentOutOfRangeException();
}
return Enum.ToObject(type, integer);
}
var valueType = value.GetType();
// is the javascript value an ICallable instance ?
if (valueType == typeof(Func<JsValue, JsValue[], JsValue>))
{
var function = (Func<JsValue, JsValue[], JsValue>)value;
if (type.IsGenericType)
{
var genericType = type.GetGenericTypeDefinition();
// create the requested Delegate
if (genericType.Name.StartsWith("Action"))
{
var genericArguments = type.GetGenericArguments();
var @params = new ParameterExpression[genericArguments.Count()];
for (var i = 0; i < @params.Count(); i++)
{
@params[i] = Expression.Parameter(genericArguments[i], genericArguments[i].Name + i);
}
var tmpVars = new Expression[@params.Length];
for (var i = 0; i < @params.Count(); i++)
{
var param = @params[i];
if (param.Type.IsValueType)
{
var boxing = Expression.Convert(param, typeof(object));
tmpVars[i] = Expression.Call(null, jsValueFromObject, Expression.Constant(_engine, typeof(Engine)), boxing);
}
else
{
tmpVars[i] = Expression.Call(null, jsValueFromObject, Expression.Constant(_engine, typeof(Engine)), param);
}
}
var @vars = Expression.NewArrayInit(typeof(JsValue), tmpVars);
var callExpresion = Expression.Block(Expression.Call(
Expression.Call(Expression.Constant(function.Target),
function.Method,
Expression.Constant(JsValue.Undefined, typeof(JsValue)),
@vars),
jsValueToObject), Expression.Empty());
return Expression.Lambda(callExpresion, new ReadOnlyCollection<ParameterExpression>(@params));
}
else if (genericType.Name.StartsWith("Func"))
{
var genericArguments = type.GetGenericArguments();
var returnType = genericArguments.Last();
var @params = new ParameterExpression[genericArguments.Count() - 1];
for (var i = 0; i < @params.Count(); i++)
{
@params[i] = Expression.Parameter(genericArguments[i], genericArguments[i].Name + i);
}
var @vars =
Expression.NewArrayInit(typeof(JsValue),
@params.Select(p => {
var boxingExpression = Expression.Convert(p, typeof(object));
return Expression.Call(null, jsValueFromObject, Expression.Constant(_engine, typeof(Engine)), boxingExpression);
})
);
// the final result's type needs to be changed before casting,
// for instance when a function returns a number (double) but C# expects an integer
var callExpresion = Expression.Convert(
Expression.Call(null,
convertChangeType,
Expression.Call(
//.........这里部分代码省略.........
示例2: BuildNewExpression
private static NewExpression BuildNewExpression(Container container,
ConstructorInfo constructor,
ParameterExpression[] funcParameterExpression)
{
var ctorParameters = constructor.GetParameters();
var ctorParameterTypes = ctorParameters.Select(p => p.ParameterType).ToArray();
var funcParameterTypes = funcParameterExpression.Select(p => p.Type).ToArray();
int funcParametersIndex = IndexOfSubCollection(ctorParameterTypes, funcParameterTypes);
if (funcParametersIndex == -1)
{
throw new ActivationException(string.Format(CultureInfo.CurrentCulture,
"The constructor of type {0} did not contain the sequence of the following " +
"constructor parameters: {1}.",
constructor.DeclaringType.FullName,
string.Join(", ", funcParameterTypes.Select(t => t.Name))));
}
var firstCtorParameterExpressions = ctorParameterTypes
.Take(funcParametersIndex)
.Select(type => container.GetRegistration(type, true).BuildExpression());
var lastCtorParameterExpressions = ctorParameterTypes
.Skip(funcParametersIndex + funcParameterTypes.Length)
.Select(type => container.GetRegistration(type, true).BuildExpression());
var expressions = firstCtorParameterExpressions
.Concat(funcParameterExpression)
.Concat(lastCtorParameterExpressions)
.ToArray();
return Expression.New(constructor, expressions);
}
示例3: WrapParametersInObjectArray
private static NewArrayExpression WrapParametersInObjectArray(ParameterExpression[] parameterExpressions)
{
return Expression.NewArrayInit(
typeof(object), parameterExpressions.Select(x => Expression.Convert(x, typeof(object))));
}
示例4: Convert
public virtual object Convert(object value, Type type, IFormatProvider formatProvider)
{
if (value == null)
{
if (TypeConverter.TypeIsNullable(type))
{
return null;
}
throw new NotSupportedException(string.Format("Unable to convert null to '{0}'", type.FullName));
}
// don't try to convert if value is derived from type
if (type.IsInstanceOfType(value))
{
return value;
}
if (type.IsEnum)
{
var integer = System.Convert.ChangeType(value, typeof(int), formatProvider);
if (integer == null)
{
throw new ArgumentOutOfRangeException();
}
return Enum.ToObject(type, integer);
}
var valueType = value.GetType();
// is the javascript value an ICallable instance ?
if (valueType == typeof(Func<JsValue, JsValue[], JsValue>))
{
var function = (Func<JsValue, JsValue[], JsValue>)value;
if (type.IsGenericType)
{
var genericType = type.GetGenericTypeDefinition();
// create the requested Delegate
if (genericType.Name.StartsWith("Action"))
{
var genericArguments = type.GetGenericArguments();
var @params = new ParameterExpression[genericArguments.Count()];
for (var i = 0; i < @params.Count(); i++)
{
@params[i] = Expression.Parameter(genericArguments[i], genericArguments[i].Name + i);
}
var @vars = Expression.NewArrayInit(typeof(JsValue), @params.Select(p => Expression.Call(null, typeof(JsValue).GetMethod("FromObject"), Expression.Constant(_engine, typeof(Engine)), p)));
var callExpresion = Expression.Block(Expression.Call(
Expression.Call(Expression.Constant(function.Target),
function.Method,
Expression.Constant(JsValue.Undefined, typeof(JsValue)),
@vars),
typeof(JsValue).GetMethod("ToObject")), Expression.Empty());
return Expression.Lambda(callExpresion, new ReadOnlyCollection<ParameterExpression>(@params));
}
else if (genericType.Name.StartsWith("Func"))
{
var genericArguments = type.GetGenericArguments();
var returnType = genericArguments.Last();
var @params = new ParameterExpression[genericArguments.Count() - 1];
for (var i = 0; i < @params.Count(); i++)
{
@params[i] = Expression.Parameter(genericArguments[i], genericArguments[i].Name + i);
}
var @vars = Expression.NewArrayInit(typeof(JsValue), @params.Select(p => Expression.Call(null, typeof(JsValue).GetMethod("FromObject"), Expression.Constant(_engine, typeof(Engine)), p)));
var callExpresion = Expression.Convert(
Expression.Call(
Expression.Call(Expression.Constant(function.Target),
function.Method,
Expression.Constant(JsValue.Undefined, typeof(JsValue)),
@vars),
typeof(JsValue).GetMethod("ToObject")),
returnType);
return Expression.Lambda(callExpresion, new ReadOnlyCollection<ParameterExpression>(@params));
}
}
else
{
if (type == typeof(Action))
{
return (Action)(() => function(JsValue.Undefined, new JsValue[0]));
}
else if (type.IsSubclassOf(typeof(System.MulticastDelegate)))
{
var method = type.GetMethod("Invoke");
var arguments = method.GetParameters();
var @params = new ParameterExpression[arguments.Count()];
for (var i = 0; i < @params.Count(); i++)
{
@params[i] = Expression.Parameter(typeof(object), arguments[i].Name);
}
//.........这里部分代码省略.........