0

この例を考えると:

IColor[] items;
items = new IColour[]{ new SomeColour() };

リフレクションを使用してアイテムを確認し、取得するのtypeof(SomeColour)ではなく、どうすればよいtypeof(IColour)ですか?私が精通しているものを使用すると、実際のタイプではなく、typeof(items).GetElementType()私に与えます。IColour

4

5 に答える 5

5

あなたが求めていることは不可能です。配列には、それぞれが異なる具象タイプを持つ複数のアイテムを格納できます。

配列のタイプはですIColor。インデックス0に格納されているアイテムのタイプはですSomeColour。配列に2番目の項目を追加した場合はどうなりますかAnotherColour。タイプはどうあるべきitemsですか?

items[index].GetType()whereが配列index内の場所を指していることを使用して、配列に格納されているアイテムのタイプを取得できます。

于 2013-02-14T11:41:31.650 に答える
1

多分これ?

foreach (var item in items)
{
    var t = item.GetType();
}

tはSomeColur、OtherColurなどである必要があります。

于 2013-02-14T11:50:04.157 に答える
0

typeof(items).GetElementTypeIS IColor、それはIColorのリストだからです。

タイプの基礎となる特定の要素を取得するには:

IColor item = items[<someIdx>];
item.GetType();
于 2013-02-14T11:41:58.940 に答える
0

を持っている場合IColor[]、「実際のタイプ」について言えることは次のとおりIColorです。たとえば、次のようになります。

class Foo : IColor {...}
class Bar : IColor {...}

2と3のIColor[]配列があります。今:「タイプ」とは何ですか?FooBar

配列が空でない場合は、たとえば、最初の項目を見ることができます。

var type = items[0].GetType();

しかし、データが異種である場合、それは役に立ちません。異なるタイプをチェックして、それが均質であることが判明することを期待できます。

var type = items.Select(x => x.GetType()).Single();
于 2013-02-14T11:42:15.553 に答える
0

これは、@ 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
{ }
于 2013-02-14T11:56:04.707 に答える