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



这个函数应该返回一个对象数组的对象数组,

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]);
}

通过这个我得到了返回

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

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

CS0021无法将[]索引应用于类型为"object"的表达式

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

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

当您使用object.ToString()时(除非.ToString()已被重写(,它将返回类型的名称。

这就是当您调用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]);
}
}

由于对象不可迭代,因此引发错误。

最新更新