[英]Cannot implicitly convert type void to IList<int>
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'
不確定是什么問題?
您的問題是通用List類的AddRange方法被聲明為返回void。
更新 :編輯以修復List<int>
與IList<int>
問題。
您需要將其更改為:
List<int> foo = new List<int>();
foo.AddRange(
categoryIDList
.Split(',')
.Select(s => Convert.ToInt32(s)));
c.CategoryIDList = foo;
為什么不使用選擇查詢的結果初始化列表而不是執行AddRange,因為它將IEnumerable作為重載:
c.CategoryIDList = new List<int>(categoryIDList.Split(',')
.Select(s => Convert.ToInt32(s)));
AddRange不返回列表-它返回void。 您可以通過采用一個可枚舉的 List<T>
的構造函數來實現:
string categoryIDList = Convert.ToString(reader["categoryIDList"]);
if (!String.IsNullOrEmpty(categoryIDList))
{
c.CategoryIDList =
new List<int>(
categoryIDList.Split(',').Select(s => Convert.ToInt32(s))
);
}
為了更好地了解發生了什么,我在下面創建了示例。 解決方案應基於1. list.AddRange,2.然后將list重新分配給其他對象:
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);
您正在將AddRange的結果分配給c.CategoryIDList,而不是新列表本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.