C#无法以菱形语法传递propertyInfo.propertyType
我想在MVC4中创建一个动态控件生成器,使用TextBoxFor()等扩展方法在代码中创建控件,但可以在菱形语法中传递我的属性类型以创建表达式。 这是我创建表达式的函数C#无法以菱形语法传递propertyInfo.propertyType,c#,model-view-controller,reflection,C#,Model View Controller,Reflection,我想在MVC4中创建一个动态控件生成器,使用TextBoxFor()等扩展方法在代码中创建控件,但可以在菱形语法中传递我的属性类型以创建表达式。 这是我创建表达式的函数 private static Expression<Func<IViewModel, TProperty>> createExpression<TProperty>(string propertyName) { ParameterExpression paramete
private static Expression<Func<IViewModel, TProperty>> createExpression<TProperty>(string propertyName)
{
ParameterExpression parameter = Expression.Parameter(myModel.GetType(), "item");
Expression<Func<IViewModel, TProperty>> lambda;
lambda = Expression.Lambda<Func<IViewModel, TProperty>>(Expression.PropertyOrField(parameter, propertyName), parameter);
return lambda;
}
私有静态表达式createExpression(字符串属性名称)
{
ParameterExpression参数=Expression.parameter(myModel.GetType(),“item”);
表达lambda;
lambda=Expression.lambda(Expression.PropertyOrField(参数,propertyName),参数);
返回lambda;
}
还有我的电话
InputExtensions.TextBoxFor(myhelper,createExpression<property.PropertyType>(property.Name);
InputExtensions.TextBoxFor(myhelper,createExpression(property.Name));
在diamond语法中,我有一个错误,只是我想传递属性的类型。泛型类中的任何类型引用都需要在编译时定义
但是在您的示例中,第二个类型
t属性
没有定义,但是可以根据property的值保存任何类型。PropertyType
这称为泛型。您不能这样做,需要使用反射。