无法强制转换类型为"System.Linq.Expressions.ConstantExpression"的对象



我试着运行这段代码。

但我可以这个错误:

$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");

相关内容

最新更新