我正在尝试将IList
类型转换为List
类型,但是每次都会出错。
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
返回IList<SubProduct>
。
我正在尝试将IList
类型转换为List
类型,但是每次都会出错。
List<SubProduct> subProducts= Model.subproduct;
Model.subproduct
返回IList<SubProduct>
。
IList
没有东西,List
例如AddRange
Answers:
尝试
List<SubProduct> subProducts = new List<SubProduct>(Model.subproduct);
要么
List<SubProduct> subProducts = Model.subproducts as List<SubProduct>;
Model.subproducts
类型已经List<SubProduct>
被掩盖了。如果是的不同实现IList<SubProduct>
,例如ReadOnlyCollection<SubProduct>
,它将静默返回null并可能NullReferenceException
在以后的程序执行中造成非常混乱的情况。实际上,如果我们知道它始终是a List<T>
,那么IList<T>
首先返回a的意义是什么?
List<ProjectResources> list = new List<ProjectResources>();
IList<ProjectResources> obj = `Your Data Will Be Here`;
list = obj.ToList<ProjectResources>();
这会将IList对象转换为List对象。
其他答案都建议将AddRange与IList一起使用。
避免强制转换的更优雅的解决方案是实现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);
}
}
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>();
}
这是将通用对象列表转换/转换为字符串列表的最佳选择。
object valueList;
List<string> list = ((IList)valueList).Cast<object>().Select(o => o.ToString()).ToList();