无法将类型 'System.Collections.Generic.List<object>' 隐式转换为 'System.Collections.Generic.IEnumerable<int>
Cannot implicitly convert type 'System.Collections.Generic.List<object>' to 'System.Collections.Generic.IEnumerable<int>
我想构建一个函数,该函数接受 non-negative 个整数和字符串的列表以及 returns 一个过滤掉字符串的新列表。
与此类似:
ListFilterer.GetIntegersFromList(new List<object>(){1, 2, "a", "b"}) => {1, 2}
ListFilterer.GetIntegersFromList(new List<object>(){1, 2, "a", "b", 0, 15}) => {1, 2, 0, 15}
为此,我做了以下操作:(评论显示了最初的尝试)
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class ListFilterer
{
public static IEnumerable<int> GetIntegersFromList(List<object> listOfItems)
{
foreach (var item in listOfItems)
{
if(item is string)
{
listOfItems.Remove(item);
}
}
// return listOfItems; <- Original attempt
return listOfItems.ToList();
}
}
这给出了标题中的错误:
src/Solution.cs(16,13): error CS0266: Cannot implicitly convert type 'System.Collections.Generic.List<object>' to 'System.Collections.Generic.IEnumerable<int>'. An explicit conversion exists (are you missing a cast?)
所以我添加了我认为正确的转换 .ToList()
但它最终没有做任何事情并且仍然提供相同的错误。我对此感到困惑,因为在搜索和查看我认为类似的问题后,我仍然没有找到正确的方法来转换它,并且由于我对 Linq 和 Enumerable 的东西缺乏经验,我不确定去哪里看。
如有任何帮助,我们将不胜感激,感谢您的宝贵时间
您是否正在寻找:
public static IEnumerable<int> GetIntegersFromList(IEnumerable<object> src) =>
src.OfType<int>();
错误是因为您已经从列表中删除了所有字符串,但列表的数据类型仍然是对象。即使您已从中删除了所有字符串,您的 List<object>
仍然可以在其中添加其他数据类型的值。简而言之,即使您删除了字符串,但列表的基础数据类型仍然是对象。在 C# 中,对象是基础 class,对象可以有整数,但其他方式是不可能的。这就是为什么 c# 给你这个错误。
我的解决方案是:
//Assuming listOfItems only contains strings and ints.
//If other datatypes are there then you have to do int.tryparse to check
//whether the current list item can be converted to int and then add that to nums.
public static IEnumerable<int> GetIntegersFromList(List<object> listOfItems)
{
List<int> nums = new List<int>();
foreach (var item in listOfItems)
{
if (!(item is string))
{
nums.Add(Convert.ToInt32(item));
}
}
// return listOfItems; <- Original attempt
return nums;
}
我想构建一个函数,该函数接受 non-negative 个整数和字符串的列表以及 returns 一个过滤掉字符串的新列表。
与此类似:
ListFilterer.GetIntegersFromList(new List<object>(){1, 2, "a", "b"}) => {1, 2}
ListFilterer.GetIntegersFromList(new List<object>(){1, 2, "a", "b", 0, 15}) => {1, 2, 0, 15}
为此,我做了以下操作:(评论显示了最初的尝试)
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class ListFilterer
{
public static IEnumerable<int> GetIntegersFromList(List<object> listOfItems)
{
foreach (var item in listOfItems)
{
if(item is string)
{
listOfItems.Remove(item);
}
}
// return listOfItems; <- Original attempt
return listOfItems.ToList();
}
}
这给出了标题中的错误:
src/Solution.cs(16,13): error CS0266: Cannot implicitly convert type 'System.Collections.Generic.List<object>' to 'System.Collections.Generic.IEnumerable<int>'. An explicit conversion exists (are you missing a cast?)
所以我添加了我认为正确的转换 .ToList()
但它最终没有做任何事情并且仍然提供相同的错误。我对此感到困惑,因为在搜索和查看我认为类似的问题后,我仍然没有找到正确的方法来转换它,并且由于我对 Linq 和 Enumerable 的东西缺乏经验,我不确定去哪里看。
如有任何帮助,我们将不胜感激,感谢您的宝贵时间
您是否正在寻找:
public static IEnumerable<int> GetIntegersFromList(IEnumerable<object> src) =>
src.OfType<int>();
错误是因为您已经从列表中删除了所有字符串,但列表的数据类型仍然是对象。即使您已从中删除了所有字符串,您的 List<object>
仍然可以在其中添加其他数据类型的值。简而言之,即使您删除了字符串,但列表的基础数据类型仍然是对象。在 C# 中,对象是基础 class,对象可以有整数,但其他方式是不可能的。这就是为什么 c# 给你这个错误。
我的解决方案是:
//Assuming listOfItems only contains strings and ints.
//If other datatypes are there then you have to do int.tryparse to check
//whether the current list item can be converted to int and then add that to nums.
public static IEnumerable<int> GetIntegersFromList(List<object> listOfItems)
{
List<int> nums = new List<int>();
foreach (var item in listOfItems)
{
if (!(item is string))
{
nums.Add(Convert.ToInt32(item));
}
}
// return listOfItems; <- Original attempt
return nums;
}