将字典转换为List <customer> </customer>

时间:2010-06-08 12:17:01

标签: c#

我有dictionary<String,Object>,我想将其转换为List<Customer> 这样做有一个聪明的方法吗? 任何例子? 感谢

EDITED

很抱歉没有正确解释。 鉴于以下原因,为什么我的结果为0? 请注意我试图模拟一个现场情况,第一个键没有意义,并希望排除所以只有我应该得到的客户。 为什么不起作用?感谢您的任何建议

class Program
{
    static void Main(string[] args)
    {
        List<Customer> oldCustomerList = new List<Customer>
        {
            new Customer {Name = "Jo1", Surname = "Bloggs1"},
            new Customer {Name = "Jo2", Surname = "Bloggs2"},
            new Customer {Name = "Jo3", Surname = "Bloggs3"}
        };
        Dictionary<string,object>mydictionaryList=new Dictionary<string, object>
        {
            {"SillyKey", "Silly Value"},
            {"CustomerKey", oldCustomerList}
        };
        List<Customer> newCustomerList = mydictionaryList.OfType<Customer>().ToList(); 

        newCustomerList.ForEach(i=>Console.WriteLine("{0} {1}", i.Name, i.Surname));
        Console.Read();
    }
}

public class Customer
{
    public string Name { get; set; }
    public string Surname { get; set; }
}

2 个答案:

答案 0 :(得分:16)

一定有办法实现,但你没有说过客户的内容,或者字符串,对象和客户之间的关系。

以下是可能适合的示例(假设您使用的是.NET 3.5或更高版本):

var customers = dictionary.Select(pair => new Customer(pair.Key, pair.Value)
                          .ToList();

或者您可能只对密钥感兴趣,密钥应该是客户的名称:

var customers = dictionary.Keys.Select(x => new Customer(x))
                               .ToList();

或者每个值都可能是Customer,但您需要投射:

var customers = dictionary.Values.Cast<Customer>().ToList();

或者您的某些值可能是Customer值,但其他值不是,您想跳过这些值:

var customers = dictionary.Values.OfType<Customer>().ToList();

(你也可以使用List<T>的构造函数,它带有IEnumerable<T>,但我倾向于发现ToList扩展方法更具可读性。)


编辑:好的,现在我们知道要求,选项是:

List<Customer> customers = dictionary.Values.OfType<List<Customer>>()
                                            .First();

List<Customer> customers = dictionary.Values.OfType<List<Customer>>()
                                            .FirstOrDefault();

如果没有这样的值,后者会给你null;前者将抛出异常。

答案 1 :(得分:1)

根据您更新的代码,列表中的相关对象是List<Customer>,因此您应该使用OfType检查。尝试这样的事情,从你字典中的所有列表中形成一个列表。

var newList = mydictionaryList.Values.OfType<List<Customer>>().SelectMany(list => list).ToList();

否则,您可以获得列表清单。