Могу ли я лить IList
в ArrayList
?Как бросить Ilist в ArrayList?
если да, то что мне делать?
IList alls = RetrieveCourseStudents(cf);
ArrayList a = (ArrayList)alls;
Верно ли это?
это имеет ошибку:
Unable to cast object of type
Могу ли я лить IList
в ArrayList
?Как бросить Ilist в ArrayList?
если да, то что мне делать?
IList alls = RetrieveCourseStudents(cf);
ArrayList a = (ArrayList)alls;
Верно ли это?
это имеет ошибку:
Unable to cast object of type
Это все о полиморфизма. ArrayList - это реализация от интерфейса IList.
IList iList = new ArrayList();
Статический тип с переменной IList является IList но ссылается на ArrayList объект!
Настоящего литья от IList до ArrayList нет, потому что вы не можете создавать/создавать объекты из интерфейса или абстрактного класса.
Как указывается в комментариях, вы должны рассмотреть возможность использования обобщенных коллекций вместо
List<Student> students = RetrieveCourseStudents(cf).Cast<Student>().ToList()
Tanx очень .... –
Вы бы только быть в состоянии бросить alls
к ArrayList
, если он уже является ArrayList
, т.е. если объект, возвращенный RetrieveCourseStudents
, является ArrayList
.
Если это не так, то вам нужно создать новый объект, воистину счастлив ArrayList
имеет constructor, который может это сделать: new ArrayList(RetrieveCourseStudents(cf))
Стоит отметить, что вы должны использовать дженерики (например, List<T>
) вместо ArrayList
, поэтому, если вам не нужно взаимодействовать с каким-то старым кодом, который не может быть обновлен, я бы держался подальше от него.
Да, Мы можем использовать IList для ArrayList, только если RetrieveCourseStudents (cf) возвращает тип Arraylist.
, например
static void Main(string[] args)
{
IList test1 = GetList();
IList test2= GetIList();
ArrayList list1 = (ArrayList)test1; // Fails
ArrayList list2 = (ArrayList)test2; // Passes
Console.ReadKey();
}
private static IList GetIList()
{
return new ArrayList();
}
private static IList GetList()
{
return new CustomList();
}
Поскольку вы прокомментировали, что просто хотите заказать возвращенный список (который в другом комментарии, который вы говорите, имеет тип EntityCollection<CourseStudent>
) - вам не нужно бросать на ArrayList
, но просто используйте это значение напрямую.
Вы можете использовать метод расширения LINQ OrderBy
(и тип переменной, который вы используете, - IList
также не подходит).
Это будет работать для ваших нужд (где CourseStudentProperty
является свойством CourseStudent
):
var alls = RetrieveCourseStudents(cf);
var orderedAlls = alls.OrderBy(cs => cs.CourseStudentProperty);
using System;
using System.Collections;
using System.Collections.Generic;
namespace MyILists
{
class Program
{
static void Main(string[] args)
{
IList<int> intArrayList = new ArrayList().ToIList<int>();
intArrayList.Add(1);
intArrayList.Add(2);
//intArrayList.Add("Sample Text"); // Will not compile
foreach (int myInt in intArrayList)
{
Console.WriteLine(" Number : " + myInt.ToString());
}
Console.Read();
}
}
public static class MyExtensions
{
public static IList<T> ToIList<T>(this ArrayList arrayList)
{
IList<T> list = new List<T>(arrayList.Count);
foreach (T instance in arrayList)
{
list.Add(instance);
}
return list;
}
}
}
Спасибо, что ответили! Хотя фрагмент кода может ответить на вопрос, по-прежнему замечательно добавлять дополнительную информацию, например, объяснять и т. Д. – j0k
просто использовать этот простой код :)
(From x In list).ToArray
Вы можете использовать LINQ союз расширение.
Обратите внимание, что вы можете комбинировать любой тип IEnumerable с этой техникой (Array, IList и т. Д.), Поэтому вам не нужно беспокоиться о методе «Добавить». Вы должны понимать, что LINQ создает неизменные результаты, поэтому вам нужно использовать «ToList()», «ToDictionary()» или что угодно, если вы хотите впоследствии манипулировать коллекцией.
var list =
(IList<Student>) new []
{
new Student {FirstName = "Jane"},
new Student {FirstName = "Bill"},
};
var allStudents = list.Union(
new [] {new Student {FirstName = "Clancey"}})
.OrderBy(s => s.FirstName).ToList();
allStudents[0].FirstName = "Billy";
foreach (var s in allStudents)
{
Console.WriteLine("FirstName = {0}", s.FirstName);
}
Выход:
FirstName = Billy
FirstName = Clancey
FirstName = Jane
Какой тип имеет 'RetrieveCourseStudents' вернуться? Зачем вам нужно отправить его в «ArrayList»? Вы не должны использовать 'ArrayList' в новом коде, но общие коллекции. – Oded
public EntityCollection RetrieveCourseStudents (CF cf); –
Почему вы хотите передать это в 'ArrayList'? – Oded