c# – 为什么没有strings.Cast演员列表到列表?
发布时间:2020-12-15 19:33:55 所属栏目:百科 来源:网络整理
导读:在 this question中建议,我可以使用.Cast object将一个泛型集合向上转换为一组对象.在 reading up a bit on .Cast 之后,我仍然无法将它作为一个通用集合投射到另一个通用集合中.以下为什么不工作? using System.Collections.Generic;using System.Linq;usin
在
this question中建议,我可以使用.Cast< object>将一个泛型集合向上转换为一组对象.在
reading up a bit on
.Cast<> 之后,我仍然无法将它作为一个通用集合投射到另一个通用集合中.以下为什么不工作?
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","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; } } } 解决方法
你在滥用
Cast<T> .
首先,这里: IEnumerable<string> items = strings.Cast<object>(); 当你调用strings.Cast< object>()时,这将返回IEnumerable< object>,而不是IEnumerable< string>.但是,集合中的项仍然是字符串,但保留在对象的引用中. 稍后,当您想将此传递给一个采用List< object>的方法时,您需要转换您的IEnumerable< T>进入IList< T>.这很容易就像这样: // Cast to IEnumerabe<object> then convert to List<object> ProcessCollectionDynamicallyWithReflection(strings.Cast<object>().ToList()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |