IT Share you

IList를 목록으로 캐스팅

shareyou 2020. 12. 6. 22:19
반응형

IList를 목록으로 캐스팅


IList유형을 List유형으로 변환 하려고하는데 매번 오류가 발생합니다.

List<SubProduct> subProducts= Model.subproduct;

Model.subproduct를 반환합니다 IList<SubProduct>.


시험

List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);

또는

List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;

이건 어때:

List<SubProduct> subProducts = Model.subproduct.ToList();

제 경우에는 제안 된 솔루션을 사용할 수 없기 때문에 이렇게해야했습니다.

List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();

List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;

암시 적 변환은을 List<>구현 하기 때문에 실패합니다. 그 IList반대가 아닙니다. 그래서 말할 수는 IList<T> foo = new List<T>()있지만 List<T> foo = (some IList-returning method or property).


List<ProjectResources> list = new List<ProjectResources>();        
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();

이것은 IList 개체를 목록 개체로 변환합니다.


다른 답변은 모두 IList와 함께 AddRange를 사용하는 것이 좋습니다.

캐스팅을 피하는보다 우아한 솔루션은 IList에 대한 확장을 구현하여 작업을 수행하는 것입니다.

VB.NET에서 :

<Extension()>
Public Sub AddRange(Of T)(ByRef Exttype As IList(Of T), ElementsToAdd As IEnumerable(Of T))
   For Each ele In ElementsToAdd
      Exttype.Add(ele)
   Next
End Sub

그리고 C #에서 :

public void AddRange<T>(this ref IList<T> Exttype, IEnumerable<T> ElementsToAdd)
{
    foreach (var ele in ElementsToAdd)
    {
        Exttype.Add(ele);
    }
}

일반 객체 목록을 문자열 목록으로 캐스팅 / 변환하는 가장 좋은 옵션입니다.

object valueList;
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList();

참고 URL : https://stackoverflow.com/questions/2207341/cast-ilist-to-list

반응형