在this question中建議我可以將一個通用集合向上投射到具有.Cast<object>
的對象集合。在reading up a bit on .Cast<>
之後,我仍然無法將它變成一個通用集合以投射到另一個通用集合中。 爲什麼以下不工作?爲什麼沒有strings.Cast <object> cast列表<string>到列表<object>?
using System.Collections.Generic;
using System.Linq;
using System;
namespace TestCast2343
{
class Program
{
static void Main(string[] args)
{
List<string> strings = new List<string> { "one", "two", "three" };
//gives error: cannot convert from 'System.Collections.Generic.List<string>'
//to 'System.Collections.Generic.List<object>'
//IEnumerable<string> items = strings.Cast<object>();
//this works
strings.Cast<object>();
//but they are still strings:
foreach (var item in strings)
{
System.Console.WriteLine(item.GetType().Name);
}
//gives error: cannot convert from 'System.Collections.Generic.List<string>'
//to 'System.Collections.Generic.List<object>'
ProcessCollectionDynamicallyWithReflection(strings);
Console.ReadLine();
}
static void ProcessCollectionDynamicallyWithReflection(List<object> items)
{
//...
}
}
}
答:
謝謝里德,這裏是我工作的代碼:
using System.Collections.Generic;
using System.Linq;
using System;
namespace TestCast2343
{
class Program
{
static void Main(string[] args)
{
List<string> strings = new List<string> { "one", "two", "three" };
List<int> ints = new List<int> { 34, 35, 36 };
List<Customer> customers = Customer.GetCustomers();
ProcessCollectionDynamicallyWithReflection(strings.Cast<object>().ToList());
ProcessCollectionDynamicallyWithReflection(ints.Cast<object>().ToList());
ProcessCollectionDynamicallyWithReflection(customers.Cast<object>().ToList());
Console.ReadLine();
}
static void ProcessCollectionDynamicallyWithReflection(List<object> items)
{
foreach (var item in items)
{
Console.WriteLine(item.GetType().Name);
}
}
}
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Street { get; set; }
public string Location { get; set; }
public string ZipCode { get; set; }
public static List<Customer> GetCustomers()
{
List<Customer> customers = new List<Customer>();
customers.Add(new Customer { FirstName = "Jim", LastName = "Jones", ZipCode = "23434" });
customers.Add(new Customer { FirstName = "Joe", LastName = "Adams", ZipCode = "12312" });
customers.Add(new Customer { FirstName = "Jake", LastName = "Johnson", ZipCode = "23111" });
customers.Add(new Customer { FirstName = "Angie", LastName = "Reckar", ZipCode = "54343" });
customers.Add(new Customer { FirstName = "Jean", LastName = "Anderson", ZipCode = "16623" });
return customers;
}
}
}
Mesleading:代碼不會將'IEnumerable
是的。這不是演員陣容,而是完全轉換。然而,Enumerable.Cast與此類似 - 不僅僅是一次單獨的操作,而是生成一個新的可枚舉序列。 –
2009-12-03 00:36:08