有谁知道为什么会这样做
GetPropertyName(x => x.Ident);
但这不是
GetPropertyNames(x => x.Ident, x => x.Name);
分别调用这两个方法
public static string GetPropertyName<T>(Expression<Func<DTO, T>> pExpression)
{
MemberExpression me = pExpression.Body as MemberExpression;
if (me != null) { return me.Member.Name; }
UnaryExpression ue = pExpression.Body as UnaryExpression;
me = ue.Operand as MemberExpression;
if (me != null) { return me.Member.Name; }
return null;
}
public static string[] GetPropertyNames<T>(params Expression<Func<DTO, T>>[] pExpressions)
{
List<string> propertyNames = new List<string>();
foreach (Expression<Func<DTO, T>> expression in pExpressions)
{
propertyNames.Add(GetPropertyName(expression));
}
return propertyNames.ToArray();
}
参数的限制
答案 0 :(得分:1)
这仅适用于两个属性相同的类型,因为它们都使用&#34; T&#34;。
编译器会告诉你像Type-Arguments这样的东西不能被使用。
修改方法,使其使用对象而不是T,如下所示:
public static string[] GetPropertyNames(params Expression<Func<DTO, object>>[] pExpressions)
{
List<string> propertyNames = new List<string>();
foreach (Expression<Func<DTO, object>> expression in pExpressions)
{
propertyNames.Add(GetPropertyName(expression));
}
return propertyNames.ToArray();
}
它应该有用。
T作为占位符,因此编译器会尝试找到匹配完整&#34;事物&#34;的T类型。由于你定义了两个表达式,他试图找到两个表达式的工作T,因此这要求你让两个表达式都是相同的类型。