C# 将整数[]添加到列表<;对象>;
问题:为什么我不能在C# 将整数[]添加到列表<;对象>;,c#,.net,list,C#,.net,List,问题:为什么我不能在列表中添加一个整数数组 下列员额: 我理解以下结构: Integer => Inherits => System.ValueType => Inherits => System.Object 那么,为什么在执行以下操作时会出现错误: List<object> myObjects = new List<object>(); myObjects.AddRange(IntegerArray.ToList()); List
列表中添加一个整数数组
下列员额:
我理解以下结构:
Integer => Inherits => System.ValueType => Inherits => System.Object
那么,为什么在执行以下操作时会出现错误:
List<object> myObjects = new List<object>();
myObjects.AddRange(IntegerArray.ToList());
List myObjects=new List();
myObjects.AddRange(IntegerArray.ToList());
给定错误:
cannot convert from 'System.Collections.Generic.List<int>' to
'System.Collections.Generic.IEnumerable<object>
无法从“System.Collections.Generic.List”转换为
'System.Collections.Generic.IEnumerable
不过,这一条很有效:
List<int> myObjects = new List<int>();
myObjects.AddRange(IntegerArray.ToList());
List myObjects=new List();
myObjects.AddRange(IntegerArray.ToList());
你试过铸造吗
List<object> myObjects = new List<object>();
myObjects.AddRange(IntegerArray.ToList().Cast<object>());
List myObjects=new List();
myObjects.AddRange(IntegerArray.ToList().Cast());
你试过铸造吗
List<object> myObjects = new List<object>();
myObjects.AddRange(IntegerArray.ToList().Cast<object>());
List myObjects=new List();
myObjects.AddRange(IntegerArray.ToList().Cast());
问题在于,正如错误消息所示,AddRange需要一个IEnumerable
,而您正在向它传递一个IEnumerable
。“int”派生自object的事实并不意味着IEnumerable
派生自IEnumerable
。如果您这样做,那么它将起作用,因为您将使用正确的类型:
myObjects.AddRange(IntegerArray.Cast<object>());
myObjects.AddRange(IntegerArray.Cast());
问题在于,正如错误消息所示,AddRange需要一个IEnumerable
,而您正在向它传递一个IEnumerable
。“int”派生自object的事实并不意味着IEnumerable
派生自IEnumerable
。如果您这样做,那么它将起作用,因为您将使用正确的类型:
myObjects.AddRange(IntegerArray.Cast<object>());
myObjects.AddRange(IntegerArray.Cast());
因为您没有将数组添加到列表中,而是试图分别添加数组中的每个元素
你当然可以这样做,这就是问题标题对我的解读:
List<object> myObjects = new List<object>();
myObjects.Add(new[] { 1, 2, 3 });
因为您没有将数组添加到列表
,而是尝试单独添加数组中的每个元素
你当然可以这样做,这就是问题标题对我的解读:
List<object> myObjects = new List<object>();
myObjects.Add(new[] { 1, 2, 3 });
在集合/泛型级别,C#中不允许协变/逆变。
i、 e.列表
到列表不允许在集合/泛型级别的C#中分配协方差/逆变。
i、 e.将列表
分配给列表
您必须明确说明如何通过例如使用ConvertAll将这些类型相互转换,如下所述:
其优点是可以转换任何类型
另外,还需要对原因进行解释:列表
不能强制转换为列表
您必须明确说明如何通过使用ConvertAll等方法将这些类型相互转换,如下所述:
其优点是可以转换任何类型
另外,还需要对原因进行解释:列表
无法转换为列表
int不是对象类型,而是基元类型。
所以要将其转换为对象,首先需要将其转换为整数,即包装器
类,然后将其转换为对象
此外,此代码需要两次类型转换。
首先从int到Integer。然后将整数转换为不能隐式执行的对象。
隐式类型转换只能由编译器完成一次。因此,它需要在对象类型中显式地进行类型转换
int不是对象类型,而是基元类型。
所以要将其转换为对象,首先需要将其转换为整数,即包装器
类,然后将其转换为对象
此外,此代码需要两次类型转换。
首先从int到Integer。然后将整数转换为不能隐式执行的对象。
隐式类型转换只能由编译器完成一次。因此,它需要在对象类型中显式地进行类型转换
检查一下这个:只是好奇,但是为什么会有一个列表
?对我来说似乎有点危险Addrange
应该是Addrange
,首先-这显然不是你真正的代码…检查这个:只是好奇,但为什么要列出列表?对我来说似乎有点危险Addrange
应该是Addrange
,首先-这显然不是你真正的代码…@UlugbekUmirov,hm.应该先测试;-)感谢您指出这一点,我更新了我的答案以反映。@UlugbekUmirov,hm.应该先测试;-)谢谢你指出这一点,我更新了我的答案进行反思。太好了!我错误地认为会发生隐式强制转换。谢谢你给我指出这一点!好极了!我错误地认为会发生隐式强制转换。谢谢你给我指出这一点!