热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

表达式解析-可以将属性名称数组作为字符串?

如何解决《表达式解析-可以将属性名称数组作为字符串?》经验,为你挑选了1个好方法。

有可能完成这个方法吗?是否可以在最新版本的C#中使用?将此视为DSL,以配置系统以查看某些对象上的某些属性更改.

List list = GetProps(x => new object[] {x.AccountOwnerName, x.AccountOwnerNumber}); 
// would return "AccountOwnerName" and "AccountOwnerNumber"

public List GetProps(Expression> exp)
{  
    // code here
}

Jon Skeet.. 5

在C#6中,您将使用:

List list = new List
{
    nameof(AccountOwner.AccountOwnerName),
    nameof(AccountOwner.AccountOwnerNumber)
};

在此之前,您当然可以将表达式树分开 - 最简单的解决方法可能是使用表达式树可视化工具,或者使用您已获得的代码并在方法中设置断点(只需返回它)现在为null)并检查调试器中的表达式树.我敢肯定它不会复杂 - 由于阵列的原因,比正常情况要多一些.

您可以使用匿名类型简化它,如果您使用:

List list = Properties.GetNames(x => new {x.AccountOwnerName, x.AccountOwnerNumber});

然后你可以:

public static class Properties
{
    public static List GetNames(Func ignored)
    {
        // Use normal reflection to get the properties
    }
}

如果你不关心订购,你可以使用

return typeof(TResult).GetProperties().Select(p => p.Name).ToList();

如果你对订货照顾,你需要看看C#编译器给人以构造函数的参数,而不是名字-这是一个有点难看.请注意,我们不需要表达式树 - 我们只需要匿名类型的属性名称.(诚​​然,表达式树也可以正常工作.)



1> Jon Skeet..:

在C#6中,您将使用:

List list = new List
{
    nameof(AccountOwner.AccountOwnerName),
    nameof(AccountOwner.AccountOwnerNumber)
};

在此之前,您当然可以将表达式树分开 - 最简单的解决方法可能是使用表达式树可视化工具,或者使用您已获得的代码并在方法中设置断点(只需返回它)现在为null)并检查调试器中的表达式树.我敢肯定它不会复杂 - 由于阵列的原因,比正常情况要多一些.

您可以使用匿名类型简化它,如果您使用:

List list = Properties.GetNames(x => new {x.AccountOwnerName, x.AccountOwnerNumber});

然后你可以:

public static class Properties
{
    public static List GetNames(Func ignored)
    {
        // Use normal reflection to get the properties
    }
}

如果你不关心订购,你可以使用

return typeof(TResult).GetProperties().Select(p => p.Name).ToList();

如果你对订货照顾,你需要看看C#编译器给人以构造函数的参数,而不是名字-这是一个有点难看.请注意,我们不需要表达式树 - 我们只需要匿名类型的属性名称.(诚​​然,表达式树也可以正常工作.)


推荐阅读
author-avatar
mobiledu2502896807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有