簡體   English   中英

無法將類型void隱式轉換為IList <int>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM