Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将整数[]添加到列表<;对象>;_C#_.net_List - Fatal编程技术网

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.应该先测试;-)谢谢你指出这一点,我更新了我的答案进行反思。太好了!我错误地认为会发生隐式强制转换。谢谢你给我指出这一点!好极了!我错误地认为会发生隐式强制转换。谢谢你给我指出这一点!