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;
}
}
3条答案
按热度按时间vyu0f0g11#
bnl4lu3b2#
比上面的更快,不涉及类型系统,只使用类型的名称
sh7euo9m3#
对于那些使用.NET Core 2.0或更高版本(包括“新的”.NET 5或更高版本)的人,
System.Type
现在有一个更方便的IsSZArray
property来为你做这件事。所以问题的代码可以重写: