c# - 无法转换类型为“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; }
}
那么我必须纠正什么?
谢谢
解决方案
哦,我的...我有一个错字:
这是正确的方法:
CreateUrl(url, u => u.Name, u => u.Age).Dump("1");
CreateUrl(url, "Name", "Age").Dump("2");
推荐阅读
- c++ - R API for C 中 R.3.4.4 和 R.3.5.1 之间的区别
- javascript - 用于 $.extend 原型继承的 TypeScript 接口
- ignite - org.apache.ignite : 连接集群失败,连接失败,重连失败
- angular - 动态附加指令在 Angular 5 中不起作用?
- java - 如何为私有服务方法和内部私有的公共方法编写单元测试?
- wpf - 基于内容的带有 RowDefinitions 的网格
- javascript - 为什么节点安装在全局而不是本地?
- vb.net - 是否有像“显示”这样的表单事件,但每次显示代码时都会运行代码,而不是第一次?
- javascript - 如何在内联 onclick 处理程序中播放视频?
- angular - 与 rxjs 升级到 6“switchMap 不是函数”相关的错误