我对C#比较陌生,与Java语言相比,它处理多维数组的方式让我很不爽。
我确信有一个简单的解决方案,而且我会因为没有意识到这一点而感到非常愚蠢,但我似乎无法在网上找到答案,也找不到答案。
考虑java中的以下代码片段:
Object firstElement(Object[] arr) {
return arr[0];
}这将返回任意维数组的第一个元素;然而,在C#中,这将抛出一个大于一维的错误,因为它不能将多维数组识别为对象数组。我发现的唯一方法是将多维数组转换为System.Array,然后使用以下代码:
object firstElement(Array arr) {
foreach (object obj in arr)
return obj;
}有没有可能在函数中没有foreach循环的情况下这样做呢?我曾尝试使用arr.GetValue(0)返回对象,但如果数组不是一维的,这将再次抛出错误。感谢你帮助这位C#新手!
发布于 2019-10-05 23:15:31
C#期望您在多维数组中寻址每一维,即使您想要访问,比如说,0,0。
Object firstElement(Object[] arr) {
return arr[0];
}由于这个原因,上面的代码将在编译时抛出。
这段代码只接受一维数组。试着这样做:
Object firstElement(Object[][] arr) {
return arr[0][0];
}根据尺寸的大小调整支架的大小。
对于object或int这样的原语,使用关键字别名也更为常见。我确实怀疑您会在某个时候用实际的类/结构实例或原语替换对象。
object firstElement(object[][] arr) {
return arr[0][0];
}我建议您阅读两种不同类型的“多维”-arrays:Jagged和actual multidimensional-arrays。关键区别在于,多维数组中的每一行必须具有相同数量的列,而锯齿数组在这方面可以是不规则的。
/edit:我似乎误解了你的意图。我相信你会尝试在每一行中获取的第一个元素。如果是这样的话,试试这个:
List<object> firstElements(object[][] arr)
{
List<object> firsts = new List<object>();
for(int i = 0; i < arr.length; i++)
{
firsts.Add(arr[i][0]);
}
return firsts;
}https://stackoverflow.com/questions/57272770
复制相似问题