如何将List <object>强制转换为List <T>?

Use*_*892 2 c#

我正在努力解决以下问题:

我有对象列表和对象类型是int:

int a = 1;
  int b = 2;
  int c = 3;
  List<object> kk = new List<object>( );
  kk.Add( ( object )a );
  kk.Add( ( object )b );
  kk.Add( ( object )c );
Run Code Online (Sandbox Code Playgroud)

并且我想要转换List<object>List<objecttype>以上示例对象类型为int.我想投List<object>List<int>.有没有办法解决这个问题?

我正在寻找通用解决方案,并假设不知道铸造类型.

在此输入图像描述

Aro*_*ron 9

使用linq的两种方法

如果没有任何对象,则抛出此版本int.

var ints = kk.Cast<int>().ToList();
Run Code Online (Sandbox Code Playgroud)

此版本将只保留可以投射到的版本int.

var ints = kk.OfType<int>().ToList();
Run Code Online (Sandbox Code Playgroud)


mha*_*ner 6

也许你可以尝试这样的事情:

List<object> objects = new List<object>();
List<int> ints = objects.Select(s => (int)s).ToList();
Run Code Online (Sandbox Code Playgroud)

应该适用于所有类型。

所以一般来说:

List<object> objects = new List<object>();
List<objecttype> castedList = objects.Select(s => (objecttype)s).ToList();
Run Code Online (Sandbox Code Playgroud)


Use*_*892 1

   var typeofkk = kk.ToArray( ).Select( x => x.GetType( ) ).ToArray( ).FirstOrDefault( );
   Array ll = Array.CreateInstance( typeofkk, kk.Count );
   Array.Copy( kk.ToArray (), ll, kk.Count );
Run Code Online (Sandbox Code Playgroud)

也许,这不是我正在寻找的解决方案,但它以某种方式解决了我的问题。