2009-10-07 10 views
0
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 속성이 있습니다.void 형식을 IList로 암시 적으로 변환 할 수 없습니다. <int>

오류 : 1 암시 적으로 형식 '무효'로 변환 할 수 없습니다

오류 'System.Collections.Generic.IList'

문제가 무엇인지 확실하지?

답변

0

AddRange의 결과를 새 목록 자체가 아닌 c.CategoryIDList에 지정합니다.

5

귀하의 문제는 AddRange method of the generic List class이 무효 반환으로 선언되어 있다는 것입니다.

업데이트 : List<int>IList<int> 문제를 수정하여 수정했습니다.

c.CategoryIDList = new List<int>(categoryIDList.Split(',') 
.Select(s => Convert.ToInt32(s))); 
+1

이샤은 IList 그래도 AddRange을 지원하지 않습니다 솔루션이 1 list.AddRange을 기반으로해야합니다, 2. 다음 뭔가 다른 목록을 재 할당? c.CategoryIDList의 유형이 IList mrblah

+0

입니다. 예, 그대로 컴파일되지 않습니다. –

+0

@homestead & Reed Copsey : 그래, 미안해. 간단한 해결책은'List '유형의 임시 변수를 사용하는 것입니다. 가능한 한 가지 해결책으로 편집하십시오. –

3

:

당신은 그것을 변경해야 목록을 반환하지 않습니다. 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)) 
     ); 
} 
2

AddRange : 그것은 과부하로 IEnumerable을 소요하기 때문에 왜 대신 AddRange을하고 당신의 선택 쿼리의 결과 목록을 초기화하지

List<int> foo = new List<int>(); 
foo.AddRange(
    categoryIDList 
    .Split(',') 
    .Select(s => Convert.ToInt32(s))); 
c.CategoryIDList = foo; 
1

는 무슨 일이 일어나고 있는지를 더 잘 이해하기 위해, 나는 아래의 예를 만들었습니다.

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); 
관련 문제