의 실제 유형 가져 오기 :이 예를 지정된 배열
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
입니다. 두 번째 항목을 배열에 추가 한 경우 : AnotherColour
items
의 유형은 무엇입니까?
items[index].GetType()
을 사용하여 배열에 저장된 항목의 유형을 얻을 수 있습니다. 여기서 index
은 배열의 위치를 가리 킵니다.
감사. 그 대답은 다음과 같습니다. 1) 빈 배열에서 수행 할 수 없습니다. 2) 배열의 모든 요소가 동일한 구체화 유형이라고 가정한다면, 첫 번째 요소의 형식을 배열, 그렇지 않으면 3) 각 배열의 유형을 얻기 위해 배열 전체를 반복해야합니다. –
모든 요소의 유형이 동일한 경우 배열의 유형을보다 구체적인 유형으로 변경할 수도 있습니다. 배열이 SomeColour []이면, SomeColour가 배열 타입이됩니다. 모든 요소의 유형이 동일하지 않을 경우 전체 배열에 대해 하나의 특정 유형이 존재하지 않습니다. –
오, 확실히이 경우 IColour의 각기 다른 구현이있는 컨테이너 클래스를 인스턴스화하고 있습니다. UI에 대한이 말도 안되는 말을하고 있습니다 (Unity3D이므로 특정 ' 내가 너무 공상에 빠지도록). –
typeof(items).GetElementType
IS IColor
입니다. 이는 IColor의 목록이기 때문입니다.
IColor[]
이있는 경우
IColor item = items[<someIdx>];
item.GetType();
을, 당신은 "실제 유형"에 대해 말할 수있는 유일한 방법은 다음과 같습니다 IColor
.
class Foo : IColor {...}
class Bar : IColor {...}
을 2 Foo
3 Bar
과 IColor[]
배열을 예를 들어, 당신은 할 수 있습니다. 자 : "유형"은 무엇입니까?
var type = items[0].GetType();
을하지만 데이터가 이종 경우 그 도움이되지 않습니다 :
배열이 비어 있지 않은 경우, 당신은 첫 번째 항목, 말, 볼 수 있었다. 당신은 별개의 유형을 확인하고 균일 한 것으로 판명 희망 수 :
var type = items.Select(x => x.GetType()).Single();
어쩌면이?
foreach (var item in items)
{
var t = item.GetType();
}
t가 SomeColur해야한다, OtherColur 등
이 @Wouter 드 kort 그룹
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
{ }
에 쓰여있는 말은 그대로 단지 예입니다 모든 항목의 유형의 (에 GetType을()), 가장 구체적인 유형을 얻습니다. – leppie
@ DeX3r : 그것도 컴파일 – leppie
typeof (items) .GetElementType(). 내 머리 꼭대기에서 DeclaringType이 응답을 게시하지 않도록 – Dreamwalker