I am trying to cast IList
type to List
type but I am getting error every time.
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
returns IList<SubProduct>
.
I am trying to cast IList
type to List
type but I am getting error every time.
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
returns IList<SubProduct>
.
Try
List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);
or
List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
Model.subproducts
is already of type List<SubProduct>
under the covers. If it's a different implementation of IList<SubProduct>
, such as ReadOnlyCollection<SubProduct>
, it will silently return null and will likely cause a very confusing NullReferenceException
later in the program execution. And really, if we know that it's always going to be a List<T>
, then what's the point of returning an IList<T>
in the first place? –
Mage How about this:
List<SubProduct> subProducts = Model.subproduct.ToList();
In my case I had to do this, because none of the suggested solutions were available:
List<SubProduct> subProducts = Model.subproduct.Cast<SubProduct>().ToList();
List<SubProduct> subProducts= (List<SubProduct>)Model.subproduct;
The implicit conversion failes because List<>
implements IList
, not viceversa. So you can say IList<T> foo = new List<T>()
, but not List<T> foo = (some IList-returning method or property)
.
If you have an IList containing interfaces, you can cast it like this:
List to IList
List<Foo> Foos = new List<Foo>();
IList<IFoo> IFoos = Foos.ToList<IFoo>();
IList to List
IList<IFoo> IFoos = new List<IFoo>();
List<Foo> Foos = new List<Foo>(IFoos.Select(x => (Foo)x));
This assumes Foo
has IFoo
interfaced.
List<ProjectResources> list = new List<ProjectResources>();
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();
This Would Convert IList Object to List Object.
The other answers all recommend to use AddRange with an IList.
A more elegant solution that avoids the casting is to implement an extension to IList to do the job.
In 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
And in C#:
public void AddRange<T>(this ref IList<T> Exttype, IEnumerable<T> ElementsToAdd)
{
foreach (var ele in ElementsToAdd)
{
Exttype.Add(ele);
}
}
public async Task<List<TimeAndAttendanceShift>> FindEntitiesByExpression(Expression<Func<TimeAndAttendanceShift, bool>> predicate)
{
IList<TimeAndAttendanceShift> result = await _dbContext.Set<TimeAndAttendanceShift>().Where(predicate).ToListAsync<TimeAndAttendanceShift>();
return result.ToList<TimeAndAttendanceShift>();
}
This is the best option to cast/convert list of generic object to list of string.
object valueList;
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList();
© 2022 - 2024 — McMap. All rights reserved.
IList
doesn't have stuff thatList
has, for exampleAddRange
– Unintelligible