C# 如何识别代表SZ数组的System.Type实例?
CLR使用独特的C# 如何识别代表SZ数组的System.Type实例?,c#,.net,arrays,reflection,clr,C#,.net,Arrays,Reflection,Clr,CLR使用独特的System.Type实例来表示SZ数组(一维、零基、aka向量)和非零基数组(即使它们是一维的)。我需要一个函数,该函数获取System.Type的一个实例,并识别它是否表示SZ数组。我可以使用GetArrayRank()方法检查排名,但不知道如何检查它是否基于零。你能帮帮我吗 using System; class Program { static void Main() { var type1 = typeof (int[]);
System.Type
实例来表示SZ数组(一维、零基、aka向量)和非零基数组(即使它们是一维的)。我需要一个函数,该函数获取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;
}
}
比上面更快,无需接触类型系统,只需使用类型的名称
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;
}
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;
}