我如何识别一个系统?表示SZ-Array的类型实例
本文关键字:表示 SZ-Array 实例 类型 系统 何识别 识别 一个 | 更新日期: 2023-09-27 18:12:00
CLR使用不同的System.Type
实例来表示sz数组(一维的,零基的,又名向量)和非零基的数组(即使它们是一维的)。我需要一个函数,它接受System.Type
的一个实例,并识别它是否代表sz数组。我能够使用GetArrayRank()
方法检查排名,但不知道如何检查它是基于零的。你能帮帮我吗?
using System;
class Program
{
static void Main()
{
var type1 = typeof (int[]);
var type2 = Array.CreateInstance(typeof (int), new[] {1}, new[] {1}).GetType();
Console.WriteLine(type1 == type2); // False
Console.WriteLine(IsSingleDimensionalZeroBasedArray(type1)); // True
Console.WriteLine(IsSingleDimensionalZeroBasedArray(type2)); // This should be False
}
static bool IsSingleDimensionalZeroBasedArray(Type type)
{
// How do I fix this implementation?
return type != null && type.IsArray && type.GetArrayRank() == 1;
}
}
static bool IsSingleDimensionalZeroBasedArray(Type type)
{
return type != null && type.IsArray && type == type.GetElementType().MakeArrayType();
}
比上面更快,不涉及类型系统,只使用类型的名称
public static bool IsSzArray( this Type type ) {
if ( type != null && type.IsArray ) {
string name = type.Name;
int len = name.Length;
return len > 2 && name[ len - 2 ] == '[';
}
return false;
}
对于那些使用。net Core 2.0或更高版本(包括"new";. net 5或更高版本),System.Type
现在有一个更方便的IsSZArray
属性来为您完成此操作。所以问题的代码可以重写:
static bool IsSingleDimensionalZeroBasedArray(Type type)
{
return type?.IsSZArray ?? false;
}