对象类型是 object[],但是当使用 .length 它现在显然是一个对象

Object type is object[], but when using .length it is now apparently an object

这个函数应该return对象数组的对象数组,

public static object[] testmethod()
{
  var connection = ConnectDB("notesDB.db");
  connection.Open();
  var command = connection.CreateCommand();
  command.CommandText = @"SELECT noteTitle, noteContents, noteID FROM userNotes WHERE noteUserID = '1'";
  var reader = command.ExecuteReader();
  List<object> noteDetails = new List<object>();
  while (reader.Read())
  {
    Object[] values = new Object[reader.FieldCount];
    reader.GetValues(values);
    noteDetails.Add(values);
  }            
  return noteDetails.ToArray();
}

使用时

NoteInfoArray = NotesModel.testmethod();
foreach (var item in NoteInfoArray)
{
  Trace.WriteLine(item);
}

for (int i = 0; i < NoteInfoArray.Length; i++)
  {
    Trace.WriteLine(NoteInfoArray[i]);
}

通过这个我得到 return

System.Object[]
System.Object[]
System.Object[]
System.Object[]
System.Object[]

但是当我尝试索引这些假定的对象数组时,我得到

CS0021 Cannot apply indexing with [] to an expression of type 'object'

有人知道我该如何解决这个问题吗?

NoteInfoArray[] 是一个对象数组,因此它有一个 .Length 属性.

当您使用 object.ToString() 时(除非 .ToString() 已被覆盖)它将 return 类型的名称。

这就是您调用 Trace.WriteLine(NoteInfoArray[i]); 时看到的内容。

但是,NoteInfoArray[i] 的声明类型仍然是 object,因此,如果您尝试对其进行索引,则会出现语法错误。

为了正确索引它,您必须像这样将它实际转换为基础类型:

for (int i = 0; i < NoteInfoArray.Length; i++)
{
    Trace.WriteLine(NoteInfoArray[i]);
    object[] asArray = (object[])NoteInfoArray[i];
    // Now you can index into asArray
}

要修复它,将对象转换为对象数组就足够了

for (int i = 0; i < NoteInfoArray.Length; i++)
{
    Console.WriteLine(NoteInfoArray[i]);

    var elementArray = (object[])NoteInfoArray[i];
    for (int j = 0; j < elementArray.Length; j++)
    {
        Console.WriteLine("\t{0}", elementArray[j]);
    }
}

由于对象不可迭代而引发错误。