C#处理Excel返回的非零下界一维数组的模式匹配方案
C#匹配下界非零一维数组的方案
现象原因
C# 中 T[] 语法对应的是 .NET 中的SZ数组(单维零基数组),这类数组强制要求下界为0,和你通过Array.CreateInstance创建的一维非零基数组属于不同的类型,所以自然无法通过object[]模式匹配命中。
而多维数组的语法T[,]本身对应的就是.NET的非SZ数组,天生支持任意下界,所以哪怕下界为1的二维数组也能正常匹配。
匹配方案
你可以通过属性模式匹配基类Array,再校验维度、元素类型两个条件,就能覆盖所有一维object数组,不受下界限制:
switch 表达式写法示例
return result switch { object[,] twoDArray => /* 处理二维数组逻辑 */, Array { Rank: 1, ElementType: var elemType } when elemType == typeof(object) => HandleOneDArray((Array)result), string message => /* 处理字符串逻辑 */, _ => throw new MyException("不支持的返回类型") };
验证测试
你之前的测试用例改用该模式后会返回true:
Array.CreateInstance(typeof(object), new[] { 2 }, new[] { 1 }) is Array { Rank:1, ElementType: var t } when t == typeof(object); // 输出:True
操作提示
匹配到的Array实例可以直接通过GetValue、SetValue方法按原下界访问元素,也可以直接转成0基集合方便后续处理:
object[] zeroBasedArr = oneDArray.Cast<object>().ToArray();
内容的提问来源于stack exchange,提问作者Martin Liversage
相关产品推荐
相关产品推荐

