다음 코드를 감안할 때 :형식을 구분하는 방법 : Int32 [] & Int32 [*]?
var type1 = typeof(int[]); // Int32[]
var type2 = Array.CreateInstance(elementType: typeof(int),
lengths: new [] {0},
lowerBounds: new []{1}).GetType(); // Int32[*]
배열 형 (.IsArray 사실 반환하는 유형), 어떻게 안정적으로 배열 형의 그 이가지 사이 differenciate 수 있습니다 감안할 때?
해킹 된 솔루션을 사용하지 않는 것이 좋습니다 (유형을 인스턴스화하거나 이름에서 "*"를 찾는 것과 같습니다).
컨텍스트 : serializer를 구축 중이며 모든 유형에 대해 작동해야하므로 == typeof (int [])와 같은 상수 비교가 작동하지 않습니다.
'type.IsArray을!? "배열이 아닙니다": type.GetArrayRank()> 1? "다차원 배열": type == type.GetElementType(). MakeArrayType()? "0에 기반을 둔 배열": "0이 아닌 배열" – PetSerAl
이 질문에는 조금 더 많은 문맥이 필요합니다. 유형 이름에 문자열 비교를 사용하는 것은 권장하지 않지만 질문에 대한 확실한 답은 type2입니다! = typeof (int []). 이러한 유형이나 변수가 어디에서 왔는지에 대한 컨텍스트가 있다면 (몇 가지 간단한 정보) 우리는 여러분에게 정말 유용한 대답을 줄 수 있습니다. –
@PetSerAl 그것은 훌륭한 대답입니다! 너무 많이 시도해 주셔서 감사합니다. & Chris Schaller serializer를 만들고 있는데 모든 유형에서 작동해야하므로 typeof (int [])에 대한 지속적인 검사가 작동하지 않을 것입니다. – hl3mukkel