首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >to字典类型列表

to字典类型列表
EN

Stack Overflow用户
提问于 2015-06-18 05:40:41
回答 1查看 62关注 0票数 0

我有一个对象List<T>和一个keyfieldName类型的T,我正在尝试将这个List<T>转换成一个Dictionary<string,double>

例如,如果T类型为Person类型,则将给我keyfieldName ="UserId"

代码语言:javascript
复制
ListItem1==>    Person
        UserId  1
        Firstname : "John"
        Lastname    "Doe"
ListItem2==>    Person
        UserId  2
        Firstname : "Mark"
        Lastname    "Twain"
ListItem3==>    Person
        UserId  27
        Firstname : "Hello"
        Lastname    "Life"      

我期望的结果是Dictionary<string,double>,思想是接受T类型中的每个属性,取其值,并将其附加到:keyfieldName。keyfieldName本身被排除在字典之外。类型T中的所有属性都必须转换为字符串。

字典应该是这样的:

代码语言:javascript
复制
"John:1",0
"Doe:1",0
"Mark:2",0
"Twain:2",0
"Hello:27",0
"Life:27",0 

到目前为止,我尝试的是循环:

代码语言:javascript
复制
FieldInfo Idfield = typeof(T).GetField(HashKeyFieldName);
foreach (var item in indexItems)
{
    string keyvalue = Idfield.GetValue(item).ToString();

    foreach (var f in typeof(T).GetFields().Where(f => f.Name != HashKeyFieldName))
    {
        string obj =f.GetValue(item).ToString() + ":" + keyvalue;
    }
}

我注意到ListToDictionary函数;我想知道它是否可以更快更好地完成,如果可以,如何完成呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-18 05:48:20

如果你事先知道类型,我会用:

代码语言:javascript
复制
var dictionary = list.Select(x => x.FirstName + ":" + x.UserId)
                     .Concat(list.Select(x => x.LastName + ":" + x.UserId))
                     .ToDictionary(p => p, p => 0);

每个附加属性都会有一个额外的Concat调用,但是如果您事先知道类的话,这应该不会太糟糕。如果您真的需要使用反射来完成这个任务,那么您已经得到的代码大致就是我所使用的代码--尽管我强烈建议您使用属性而不是字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30907285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档