如何在运行时将用户提供的字符串映射到对象属性?

凯尔·巴兰(Kyle Baran)

给定此接口:

public interface IToken
{
    int ID { get; }
    string Name { get; }
    string Description { get; }
    string Type { get; }
    string Category { get; }
}

假设我有一个IEnumerable<IToken>约有200名成员的成员,它是通过从各种文件中读取JSON来构造的。为了测试它,我创建了一个ConsoleApplication项目,并且尝试通过LINQ来成功地操作集合。

我想做的是从控制台接收输入,并通过我设计的命令对其进行处理:

exit
list token
list token filter [filterType] [filterValue]

因此,如果我只输入list token,它将迭代列表并输出所有成员。简单。

如果我键入会出现问题list token filter Category "SomeCategory"(它应该IToken在集合中选择的所有对象Category == "SomeCategory");我不知道如何编程它,以将用户提供的字符串映射[filterType]到名为的对象属性Category(或IToken上可能存在或可能不存在的其他属性),除非我为每种情况都进行了硬编码对我来说,这太费力了,而且扩展性不好。

这样做的最佳方法是什么?

现在,我的代码是:

private void Input_ListTokens(string filterType, string filterValue)
{
    IEnumerable<string> result = null;

    if (String.IsNullOrWhiteSpace(filterType) || String.IsNullOrWhiteSpace(filterValue))
    {
        result = from t in Tokens
                    select t.ToString();
    }
    else
    {
        if (filterType == "type")
            result = from t in Tokens
                        where t.Type == filterValue
                        select t.ToString();

        if (filterType == "category")
            result = from t in Tokens
                        where t.Category == filterValue
                        select t.ToString();
    }

    if (result != null)
        foreach (var item in result)
            c.WriteLine(item);
    c.WriteLine();
}

如您所见,两个LINQ查询之间唯一的区别是

where t.Type == filterValue
where t.Category == filterValue
Rangesh
private void Input_ListTokens(string filterType, string filterValue)
{
 IEnumerable<string> result = null;
   Type t = typeof(IToken);
   PropertyInfo f = t.GetProperty(filterType);
   if (f!=null)
            result = from t in Tokens
                        where t.GetValue(t)== filterValue
                        select t.ToString();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在运行时将字符串数组存储到单个应用程序设置属性?

来自分类Dev

如何在运行时更改NLog目标的连接字符串?

来自分类Dev

如何在运行时将字符串转换为代码

来自分类Dev

如何在运行时在Objective-C中查找字符串常量?

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时在EF7 Core中更改连接字符串?

来自分类Dev

如何在运行时将java中的字符串参数作为参数传递

来自分类Dev

如何在运行时使用持有其名称的字符串访问常量字符串?

来自分类Dev

如何在运行时将Java自定义或字符串对象添加到DAO模型对象?

来自分类Dev

如何在运行时提供MapStruct Mapping批注映射元数据

来自分类Dev

在运行时将JSON对象的JSON字符串覆盖到JSON对象

来自分类Dev

Json.NET反序列化或序列化json字符串并将属性映射到运行时定义的不同属性名称

来自分类Dev

Json.NET反序列化或序列化json字符串,并将属性映射到运行时定义的不同属性名称

来自分类Dev

如何在运行时将字符串转换为其自身的带引号的版本?

来自分类Dev

使用连接字符串和精简程序时如何在运行时更改初始目录

来自分类Dev

如何在运行时映射表创建?

来自分类Dev

在运行时使用连接字符串

来自分类Dev

PyQt:在运行时转换模块字符串

来自分类Dev

尝试在运行时编辑字符串

来自分类Dev

Dapper 在运行时更改连接字符串

来自分类Dev

如何在运行时将图像从Android设备的库映射到Unity应用程序中的Textures?

来自分类Dev

如何在运行时从python提供Java输入?

来自分类Dev

如何构造函数注入仅在运行时已知的字符串?(温莎城堡)

来自分类Dev

如何避免作弊引擎在运行时看到我的字符串

来自分类Dev

如何在运行时使用反射从类的对象获取属性的值

来自分类Dev

如何在运行时将属性附加到MOQ对象中

来自分类Dev

如何在运行时添加到对象的未知List属性?

来自分类Dev

如何在JavaScript中在运行时中向对象添加/删除属性

来自分类Dev

如何在运行时在Typescript中添加属性

Related 相关文章

  1. 1

    如何在运行时将字符串数组存储到单个应用程序设置属性?

  2. 2

    如何在运行时更改NLog目标的连接字符串?

  3. 3

    如何在运行时将字符串转换为代码

  4. 4

    如何在运行时在Objective-C中查找字符串常量?

  5. 5

    如何在运行时将java中的字符串参数作为参数传递

  6. 6

    如何在运行时在EF7 Core中更改连接字符串?

  7. 7

    如何在运行时将java中的字符串参数作为参数传递

  8. 8

    如何在运行时使用持有其名称的字符串访问常量字符串?

  9. 9

    如何在运行时将Java自定义或字符串对象添加到DAO模型对象?

  10. 10

    如何在运行时提供MapStruct Mapping批注映射元数据

  11. 11

    在运行时将JSON对象的JSON字符串覆盖到JSON对象

  12. 12

    Json.NET反序列化或序列化json字符串并将属性映射到运行时定义的不同属性名称

  13. 13

    Json.NET反序列化或序列化json字符串,并将属性映射到运行时定义的不同属性名称

  14. 14

    如何在运行时将字符串转换为其自身的带引号的版本?

  15. 15

    使用连接字符串和精简程序时如何在运行时更改初始目录

  16. 16

    如何在运行时映射表创建?

  17. 17

    在运行时使用连接字符串

  18. 18

    PyQt:在运行时转换模块字符串

  19. 19

    尝试在运行时编辑字符串

  20. 20

    Dapper 在运行时更改连接字符串

  21. 21

    如何在运行时将图像从Android设备的库映射到Unity应用程序中的Textures?

  22. 22

    如何在运行时从python提供Java输入?

  23. 23

    如何构造函数注入仅在运行时已知的字符串?(温莎城堡)

  24. 24

    如何避免作弊引擎在运行时看到我的字符串

  25. 25

    如何在运行时使用反射从类的对象获取属性的值

  26. 26

    如何在运行时将属性附加到MOQ对象中

  27. 27

    如何在运行时添加到对象的未知List属性?

  28. 28

    如何在JavaScript中在运行时中向对象添加/删除属性

  29. 29

    如何在运行时在Typescript中添加属性

热门标签

归档