将List <bool>转换为List <object> </object> </bool>

时间:2012-05-10 13:11:59

标签: c# .net generics covariance

是否有任何捷径或更好的方式将List<bool>强制转换为List<object>

我知道我可以通过循环和转换单个项目来做到这一点,但我想知道是否可以在一个语句中强制转换整个列表。

3 个答案:

答案 0 :(得分:9)

您可以使用Enumerable.Cast<T>方法执行此操作:

List<bool> bools= GetBoolList();
IList<Object> objects= bools.Cast<Object>().ToList();

答案 1 :(得分:6)

执行此操作的非LINQ方法是使用List.ConvertAll

List<bool> b = new List<bool> { true, false, true };
List<object> o = b.ConvertAll(x => (object)x);

由于此方法知道创建新列表的大小,因此它可能比大型列表的LINQ版本更快。

答案 2 :(得分:3)

List<bool> list = new List<bool>{true,true,false,false,true};
List<Object> listObj1 = list.Select(i=> (Object)i).ToList();// First way
List<Object> listObj2 = list.Cast<Object>().ToList();// Second way 
List<Object> listObj3 = list.OfType<Object>().ToList();// Third way 

以下是在linqpad

中快速测试
 list.Dump();
 listObj1.Dump();
 listObj2.Dump();
 listObj3.Dump();