この例を考えると:
IColor[] items;
items = new IColour[]{ new SomeColour() };
リフレクションを使用してアイテムを確認し、取得するのtypeof(SomeColour)
ではなく、どうすればよいtypeof(IColour)
ですか?私が精通しているものを使用すると、実際のタイプではなく、typeof(items).GetElementType()
私に与えます。IColour
この例を考えると:
IColor[] items;
items = new IColour[]{ new SomeColour() };
リフレクションを使用してアイテムを確認し、取得するのtypeof(SomeColour)
ではなく、どうすればよいtypeof(IColour)
ですか?私が精通しているものを使用すると、実際のタイプではなく、typeof(items).GetElementType()
私に与えます。IColour
あなたが求めていることは不可能です。配列には、それぞれが異なる具象タイプを持つ複数のアイテムを格納できます。
配列のタイプはですIColor
。インデックス0に格納されているアイテムのタイプはですSomeColour
。配列に2番目の項目を追加した場合はどうなりますかAnotherColour
。タイプはどうあるべきitems
ですか?
items[index].GetType()
whereが配列index
内の場所を指していることを使用して、配列に格納されているアイテムのタイプを取得できます。
多分これ?
foreach (var item in items)
{
var t = item.GetType();
}
tはSomeColur、OtherColurなどである必要があります。
typeof(items).GetElementType
IS IColor
、それはIColorのリストだからです。
タイプの基礎となる特定の要素を取得するには:
IColor item = items[<someIdx>];
item.GetType();
を持っている場合IColor[]
、「実際のタイプ」について言えることは次のとおりIColor
です。たとえば、次のようになります。
class Foo : IColor {...}
class Bar : IColor {...}
2と3のIColor[]
配列があります。今:「タイプ」とは何ですか?Foo
Bar
配列が空でない場合は、たとえば、最初の項目を見ることができます。
var type = items[0].GetType();
しかし、データが異種である場合、それは役に立ちません。異なるタイプをチェックして、それが均質であることが判明することを期待できます。
var type = items.Select(x => x.GetType()).Single();
これは、@ Wouterdekortが言っていることのほんの一例です。
internal class Program
{
private static void Main(string[] args)
{
IColour[] items;
items = new IColour[] { new SomeColour(), new SomeOtherColour() };
Console.WriteLine(items.GetType().GetElementType().Name); // Will always return IColour
foreach (var item in items)
{
Console.WriteLine(item.GetType().Name); // Will return the name of type added with the IColour interface
}
Console.ReadLine();
}
}
internal interface IColour
{ }
internal class SomeColour : IColour
{ }
internal class SomeOtherColour : IColour
{ }