2 つの小さなクラスがPet
あり、Book
それぞれにいくつかのプロパティと、次のようなメソッドを持つ関数があります。
public static List<T> GetSubSet<T>(List<T> incomingList)
{
var returnList = new List<T>();
Random r = new Random();
Console.WriteLine("Enter size of random subset: ");
int randomInt = 0;
int size = Convert.ToInt32(Console.ReadLine());
while (size > incomingList.Count)
{
Console.WriteLine("Size too large, enter smaller subset: ");
size = Convert.ToInt32(Console.ReadLine());
}
while (returnList.Count < size)
{
randomInt = r.Next(incomingList.Count);
if (!returnList.Contains(incomingList[randomInt]))
{
returnList.Add(incomingList[randomInt]);
}
}
return returnList;
}
オブジェクトの一般的なリストを取り、より小さなサブセットを返します。この関数は機能し、Pet または Book オブジェクトのいずれかを取ることができます。Pet と Book の両方のタイプを含むリストで同じ関数を使用したいと思います。これを行う方法を私が知っている最善の方法は、インターフェイスを使用することです (継承はここでは意味がありません)。
interface ISubset<T>
{
IEnumerable<T> GetSubset();
}
Pet クラスにインターフェースを実装すると、次のようになります
class Pet : ISubset<Pet>
私のメインクラスには、ペットと本のリストがあります。これら 2 つの両方にオブISubset
ジェクトのリストを追加して、両方で GetSubset 関数を使用できるようにします。ただし、次のようなリストを宣言することはできません
List<ISubset<T>> list = new List<ISubset<T>>();
'the type or namespace T could not be found
インターフェイスがジェネリック型を受け入れる場合、 ISubset
オブジェクトのリストを宣言するにはどうすればよいですか?というエラーが表示されます。
わかりました、次のような2つのリストがあります
List<Pet> petList = new List<Pet>();
petList.Add(new Pet() { Name = "Mr.", Species = "Dog" });
petList.Add(new Pet() { Name = "Mrs.", Species = "Cat" });
petList.Add(new Pet() { Name = "Mayor", Species = "Sloth" });
petList.Add(new Pet() { Name = "Junior", Species = "Rabbit" });
List<Book> bookList = new List<Book>();
bookList.Add(new Book() { Author = "Me", PageCount = 100, Title = "MyBook" });
bookList.Add(new Book() { Author = "You", PageCount = 200, Title = "YourBook" });
bookList.Add(new Book() { Author = "Pat", PageCount = 300, Title = "PatsBook" });
これらのリストをまとめて別のリストに追加したい場合、タイプは何にする必要がありますか?