반응형
객체가 특정 유형의 배열인지 확인하는 방법은 무엇입니까?
이것은 잘 작동합니다.
var expectedType = typeof(string);
object value = "...";
if (value.GetType().IsAssignableFrom(expectedType))
{
...
}
값을 설정하지 않고 문자열 배열입니다하지만 어떻게 확인합니까 expectedType
에가 typeof(string[])
? 다음과 같이하고 싶습니다.
var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType().IsArrayOf(expectedType)) // <---
{
...
}
이것이 가능한가?
Type.IsArray 및 Type.GetElementType () 을 사용 하여 배열의 요소 유형을 확인합니다.
Type valueType = value.GetType();
if (valueType.IsArray && expectedType.IsAssignableFrom(valueType.GetElementType())
{
...
}
Type.IsAssignableFrom () 주의하십시오 . 유형이 정확히 일치하는지 확인하려면 같음 ( typeA == typeB
)을 확인해야합니다 . 주어진 유형이 유형 자체인지 서브 클래스 (또는 인터페이스)인지 확인하려면 다음을 사용해야합니다 Type.IsAssignableFrom()
.
typeof(BaseClass).IsAssignableFrom(typeof(ExpectedSubclass))
확장 메서드 를 사용할 수 있습니다 ( 필수 는 아니지만 더 읽기 쉽게 만들 수 있음 ).
public static class TypeExtensions
{
public static bool IsArrayOf<T>(this Type type)
{
return type == typeof (T[]);
}
}
그리고 다음을 사용하십시오.
Console.WriteLine(new string[0].GetType().IsArrayOf<string>());
찾은 가장 간단하고 안전한 방법은 다음을 사용하는 것입니다 MakeArrayType
.
var expectedType = typeof(string);
object value = new[] {"...", "---"};
if (value.GetType() == expectedType.MakeArrayType())
{
...
}
value.GetType().GetElementType() == typeof(string)
추가 보너스로 (하지만 100 % 확실하지는 않습니다. 이것이 제가 사용하는 코드입니다 ...)
var ienum = value.GetType().GetInterface("IEnumerable`1");
if (ienum != null) {
var baseTypeForIEnum = ienum.GetGenericArguments()[0]
}
이것으로 List, IEnumerable ...을 찾고 T를 얻을 수 있습니다.
실제로 어레이 유형을 알아야합니까? 아니면 특정 유형의 요소 만 필요합니까?
후자의 경우 원하는 항목과 일치하는 요소 만 필터링 할 수 있습니다.
string[] strings = array.OfType<string>();
if(objVal.GetType().Name == "Object[]")
배열의 경우 참
참고 URL : https://stackoverflow.com/questions/5274865/how-to-check-if-object-is-an-array-of-a-certain-type
반응형
'IT박스' 카테고리의 다른 글
모든 오브젝트 파일을 별도의 디렉토리에 배치하는 gcc / g ++ 옵션 (0) | 2020.12.04 |
---|---|
정의로 이동을위한 키보드 단축키 (0) | 2020.12.04 |
git의 ANSI 색상이 올바르게 표시되지 않습니다. (0) | 2020.12.04 |
matplotlib 막대 그래프 검정-막대 테두리를 제거하는 방법 (0) | 2020.12.04 |
다른 조각에서 새 조각을 열려면 어떻게합니까? (0) | 2020.12.04 |