对象类型是 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]);
}
}
由于对象不可迭代而引发错误。
这个函数应该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]);
}
}
由于对象不可迭代而引发错误。