string categoryIDList = Convert.ToString(reader["categoryIDList"]);
if (!String.IsNullOrEmpty(categoryIDList))
{
c.CategoryIDList =
new List<int>().AddRange(
categoryIDList
.Split(',')
.Select(s => Convert.ToInt32(s)));
}
该类有一个属性IList CategoryIDList,我试图将其分配给上面。
错误:
错误1无法将类型'void'隐式转换为'System.Collections.Generic.IList'
不确定是什么问题?
答案 0 :(得分:5)
您的问题是AddRange method of the generic List class被声明为返回无效。
更新:已修改以修复List<int>
与IList<int>
问题。
您需要将其更改为:
List<int> foo = new List<int>();
foo.AddRange(
categoryIDList
.Split(',')
.Select(s => Convert.ToInt32(s)));
c.CategoryIDList = foo;
答案 1 :(得分:3)
为什么不使用select查询的结果初始化列表而不是使用AddRange,因为它将IEnumerable作为重载:
c.CategoryIDList = new List<int>(categoryIDList.Split(',')
.Select(s => Convert.ToInt32(s)));
答案 2 :(得分:2)
AddRange不返回列表 - 它返回void。您可以通过List<T>
that takes an enumerable的构造函数执行此操作:
string categoryIDList = Convert.ToString(reader["categoryIDList"]);
if (!String.IsNullOrEmpty(categoryIDList))
{
c.CategoryIDList =
new List<int>(
categoryIDList.Split(',').Select(s => Convert.ToInt32(s))
);
}
答案 3 :(得分:1)
为了更好地了解正在发生的事情,我在下面创建了示例。 解决方案应基于1. list.AddRange,2。然后将列表重新分配给其他内容:
List<int> list1 = new List<int>{1,4, 8};
List<int> list2 = new List<int> { 9, 3, 1 };
//this will cause compiler error "AddRange cannot convert source type void to target type List<>"
//List<int> list3 = list1.AddRange(list2);
//do something like this:
List<int> list3 = new List<int>();
list3.AddRange(list1);
list3.AddRange(list2);
答案 4 :(得分:0)
您将AddRange的结果分配给c.CategoryIDList,而不是新列表本身。