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

时间:2013-05-24 09:52:10

标签: 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 );

我希望将List<object>强制转换为List<objecttype>,在上面的示例中,对象类型为int。我想将List<object>投射到List<int>。有没有办法解决这个问题?

我正在寻找通用解决方案,并且不了解铸造类型。

enter image description here

5 个答案:

答案 0 :(得分:6)

使用linq

的两种方法

如果任何对象不是int,则会抛出此版本。

var ints = kk.Cast<int>().ToList();

此版本只会保留可以投射到int的那些。

var ints = kk.OfType<int>().ToList();

答案 1 :(得分:1)

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

List<object> objects = new List<object>();
List<int> ints = objects.Select(s => (int)s).ToList();

适用于所有类型。

总的来说:

List<object> objects = new List<object>();
List<objecttype> castedList = objects.Select(s => (objecttype)s).ToList();

答案 2 :(得分: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 );
也许,这不是我正在寻找的解决方案,但它以某种方式解决了我的问题。

答案 3 :(得分:0)

尝试使用列表.Cast<int>()上的kk

答案 4 :(得分:0)

试试这个:

var newList = kk.Cast<int>().ToList();