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非常に.... –
あなたはそれだけであれば、すでにArrayList
にalls
をキャストすることができるだろうジェネリックコレクションを使用することを検討すべきですArrayList
です。すなわち、RetrieveCourseStudents
によって返されたオブジェクトがArrayList
である場合です。
それはあなたが新しいオブジェクトを作成する必要があり、その後でない場合は、luckly ArrayList
はこれを行うことができますconstructorがありますnew ArrayList(RetrieveCourseStudents(cf))
それはあなたが(たとえば、List<T>
など)ジェネリックを使用してする必要があることは注目に値しますArrayList
の代わりに、更新できない古いコードと対話する必要がない限り、私はそれを離れています。
はい、 RetrieveCourseStudents(cf)がArraylistの型を返す場合にのみ、IListを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
にキャストする必要はありませんが、値を直接使用するだけです。
OrderBy
LINQ拡張メソッドを使用することができます(また、使用する可変タイプ - IList
も適切ではありません)。
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
はちょうどあなたがLINQ連合使用することができ、この単純なコード:)
(From x In list).ToArray
を使用します(CourseStudentProperty
はCourseStudent
のプロパティです)
これは、ニーズのために働くでしょう拡張。
IEnumerableの任意の型をこの手法(配列、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
パブリックEntityCollection RetrieveCourseStudents(CF cf); –
なぜそれを 'ArrayList'にキャストしたいのですか? – Oded