首页 > 解决方案 > 无法转换类型为“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; }
    }

那么我必须纠正什么?

谢谢

标签: c#

解决方案


哦,我的...我有一个错字:

这是正确的方法:

CreateUrl(url, u => u.Name, u => u.Age).Dump("1");
CreateUrl(url, "Name", "Age").Dump("2");

推荐阅读