我试着运行这段代码。
但我可以这个错误:
$exception {"Unable to cast object of type 'System.Linq.Expressions.ConstantExpression' to type 'System.Linq.Expressions.MemberExpression'."} System.InvalidCastException
:
fields.Add(((MemberExpression)ue.Operand).Member.Name.ToLower());
class Program
{
public static string CreateUrl(string url, params Expression<Func<User, object>>[] fieldSelectors)
{
var fields = new List<string>();
foreach (var selector in fieldSelectors)
{
var body = selector.Body;
if (body is MemberExpression me)
{
fields.Add(me.Member.Name.ToLower());
}
else if (body is UnaryExpression ue)
{
fields.Add(((MemberExpression)ue.Operand).Member.Name.ToLower());
}
}
var selectedFields = string.Join(',', fields);
return string.Concat(url, "?fields=", selectedFields);
}
public static string CreateUrl(string url, params string[] fields)
{
var selectedFields = string.Join(',', fields);
return string.Concat(url, "?fields=", selectedFields);
}
public static void Main(string[] args)
{
string url = "http://www.exmaple.com/users";
CreateUrl(url, url => url.Name, url => 1).Dump("1");
CreateUrl(url, "Name", "age").Dump("2");
Console.ReadKey();
}
}
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
那么我需要纠正什么呢?
谢谢
当我浏览它们的类定义时,我没有看到任何直接关系使您能够进行强制转换。
public class MemberExpression : System.Linq.Expressions.Expression
public sealed class UnaryExpression : System.Linq.Expressions.Expression
天哪…我打错了:
正确的做法是:
CreateUrl(url, u => u.Name, u => u.Age).Dump("1");
CreateUrl(url, "Name", "Age").Dump("2");